亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么用表達式寫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下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號