为什么用表达式写Carouset
为什么是用函数表达式写Carouset,
是为了模块化?
Caroust 是一个实例? init 方法是添加到实例上的?
init方法 会不会被所有实例继承 每一个实例都会创建一个init对象吗 ?
为什么是用函数表达式写Carouset,
是为了模块化?
Caroust 是一个实例? init 方法是添加到实例上的?
init方法 会不会被所有实例继承 每一个实例都会创建一个init对象吗 ?
2015-10-20
声明函数的两种方式:
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举报