1. 程式人生 > >繼承(4)-名稱空間與鏈式呼叫

繼承(4)-名稱空間與鏈式呼叫

名稱空間

管理變數,防止汙染全域性,適用於模組化開發

                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就好了。