繼承(4)-名稱空間與鏈式呼叫
阿新 • • 發佈:2018-12-16
名稱空間
管理變數,防止汙染全域性,適用於模組化開發
var name = "bcd";
var init = (function (){
var name = "abc";
function callName(){
console.log(name);
}
return function (){
callName();//留出一個介面
}
}())
init();//abc
是不是外面的name與裡面的name沒有相互影響。
var name = "bcd"; var init = (function (){ var name = "abc"; function callName(){ console.log(name); } return function (){ callName(); } }()) init(); var initDeng = (function(){ var name = 123; function callName(){ console.log(name); } return function(){ console.log(name); } }()) initDeng();
思考問題:
如何實現鏈式呼叫模式(模仿jQuery)
Obj.eat().smoke().drink().eat.sleep();
他咋這麼強大呢,能一個方法一個方法的呼叫!
那咱們能不能模擬出這個東西,調完一個方法接著再呼叫另外幾個方法。
var deng = { smoke : function () { console.log("smoke,.....xuan cool!"); }, drink : function () { console.log("drinking,.....cool"); }, perm : function () { console.log("perming,....cool"); } } deng.smoke(); deng.drink(); deng.perm();
是不是現在只能deng.smoke();deng.drink();deng.perm();的這樣呼叫,
能不能直接deng.smoke().drink();這樣呼叫?
是不是不能啊,smoke倒是出來了,那你的drink呢?
那現在想一想為什麼會這樣呢?
是不是因為smoke();完事之後返回的是undefined吧,undefined.drink();什麼都不是!undefined不可能有drink屬性!
現在怎麼改呢?
var deng = { smoke : function () { console.log("smoke,.....xuan cool!"); //return undefined; return deng; }, drink : function () { console.log("drinking,.....cool"); return deng; }, perm : function () { console.log("perming,....cool"); return deng; } } deng.smoke().drink().perm().drink();
這樣不就行了嗎,在每個函式後面加一條return deng;他會在函式執行完之後返回deng,而不是返回undefined了,那還有沒有其他的方法?
在一個物件的函式裡面,他的this指向的是誰,是不是代表我啊,是不是用this更好。
var deng = {
smoke : function () {
console.log("smoke,.....xuan cool!");
//return undefined;
return this;
},
drink : function () {
console.log("drinking,.....cool");
return this;
},
perm : function () {
console.log("perming,....cool");
return this;
}
}
deng.smoke().drink().perm().drink();
return deng是不是也可以,但是現在我要是把物件的構造權力放到建構函式裡面呢,
你都不知道構造出的物件叫啥名吧!
所以你想實現方法的連續呼叫是不是return this就好了。