为了账号安全,请及时绑定邮箱和手机立即绑定

为什么用表达式写Carouset

为什么是用函数表达式写Carouset, 

是为了模块化? 

Caroust 是一个实例?  init 方法是添加到实例上的?

init方法 会不会被所有实例继承  每一个实例都会创建一个init对象吗 ?

正在回答

1 回答

声明函数的两种方式:

  1. function A(){}

  2. 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


3 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么用表达式写Carouset

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信