命名空间
管理变量,防止污染全局,适用于模块化开发
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就好了。