mimaolu
2015-10-20 23:39
为什么是用函数表达式写Carouset,
是为了模块化?
Caroust 是一个实例? init 方法是添加到实例上的?
init方法 会不会被所有实例继承 每一个实例都会创建一个init对象吗 ?
声明函数的两种方式:
function A(){}
var A = function(){};
第一种方式的声明无论函数放在什么地方,运行时都会优先执行。第二种在运行时是按顺序执行。
我们可以测试一下:
alert(typeof a); // undefined 因为是顺序执行,此时a还未定义 var a = function(){ alert('a')};
alert(typeof a); // function 因为function声明被优先执行,此时a为function function a(){ }
明白了两者的区别,那么哪种写法更好呢?假设我们的项目是多人在开发,我们都约定用第一种方式写函数。当两个人分别在各自的js文件定义了一个function A, 这两个文件被合并后加载到页面上,那么最后只会运行一个人写的。
// 文件1 function A(){ alert('A');} A(); // AA // 文件2 function A() { alert('AA'); } A(); // AA
我们发现两处都输出了 AA, 而不是我们预期的。那么我们改为第二种写法就没问题了:
// 文件1 var A = function (){ alert('A');} A(); // A // 文件2 var A = function () { alert('AA'); } A(); // AA
不知道这么讲你明白没有,希望对你有帮助。
Carouset被定义为一个类,不是实例。致于init方法是类的静态方法,不会被实例调用的。只有在类中通过
this.method = function(){};
或者:
Carouset.prototype.method = function(){};
这样声明的方法才可以被实例调用。
var A = function (){ this.name = 'A'; } //声明类,属性name A.init = function(){ return new this; }; //声明类静态方法init, 这里的this是类本身而非实例 var a = new A; alert(typeof A.init); //function alert(typeof a.init); //undefined alert(a.name); // A A.prototype.getName = function(){return this.name; }; alert(a.getName()); // A
JS实现“旋转木马”幻灯片效果
66442 学习 · 147 问题
相似问题