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

猜你喜欢

转载自blog.csdn.net/hdq1745/article/details/83141275
今日推荐