調用call()
參數爲什麼不這項工作?我怎樣才能使它發揮作用(而沒有經過作爲 變量)
你在這裏做什麼是Function.prototype.call
共享的上下文。共享上下文不共享範圍變量。範圍變量不能從範圍之外訪問,並且pig()
在與bear()
不同的範圍內運行。
你可以做的是
一)發送的參數的公共變量:。
// recommended
function bear(){
var a = 1;
pig(a);
}
function pig(a){
alert(a);
}
bear();
B)定義對象是共同環境:
// not recommended
// hard to follow where the context is coming from
function bear(){
this.a = 1;
pig.call(this);
}
function pig(){
alert(this.a);
}
var o = {};
bear.call(o);
或
// recommended
var o = {
a: undefined,
bear: function(){
this.a = 1;
this.pig();
},
pig: function pig(){
alert(this.a);
}
};
o.bear();
角)定義一個類
// not recommended
// you are defining the methods (bear and pig) by each instantiation
var My = function(){
this.bear = function(){
this.a = 1;
this.pig();
};
this.pig = function pig(){
alert(this.a);
};
};
var o = new My();
o.bear();
或
// recommended
var My = function(){};
My.prototype = {
constructor: My,
a: undefined,
bear: function(){
this.a = 1;
this.pig();
},
pig: function pig(){
alert(this.a);
}
};
var o = new My();
o.bear();
d。)在上部範圍
// not recommended
// (unless we are talking about a commonjs module which has its own scope)
// don't pollute the global scope with local variables
var a;
function bear(){
a = 1;
pig(a);
}
function pig(a){
alert(a);
}
bear();
或閉合定義公共變量
// recommended
(function(){
var a;
function bear(){
a = 1;
pig(a);
}
function pig(a){
alert(a);
}
bear();
})();
由於* this *是一個執行上下文的參數,它不代表該cont分機(無論人們多麼頻繁地將其稱爲「上下文」)。你不能引用執行上下文,語言規範禁止它。 – RobG 2015-02-11 03:44:27
@RobG謝謝 - 這澄清了很多。它也很糟糕。 – 2015-02-11 03:48:11