如果一个变量在需要时在函数中不可用,则在作用域链中查找它(这是一个闭包),但其他时候在原型链中搜索它。我正试图将我的头包裹起来,这是什么时候发生的。我想知道是否有人可以为我清除迷雾,或者让我参考一些专门讨论这个话题的文献。
例如,我是否正确地说: - 对象以及与上下文 (this) 相关的公共变量总是在原型链中查找?- 私有变量总是在作用域链中查找(即执行上下文中的函数链)?- 是否有任何情况下程序同时查看两者/其中一个?
我测试了三种不同的场景(范围链查找、原型查找和不查找),但不幸的是,它对深入了解这一点没有足够的帮助。
var Food = function(){
var t = 1; // for closure
this.timeToPrepare = function(){ // Scope chain lookup
console.log(t * 3);
};
this.timeToMake = function(){ // This is looked up in the prototype chain
console.log(this.t * 3);
};
this.timeToEat = function(t){ //No lookup
console.log(t * 3);
};
};
Food.prototype.t = 2;
(function(){
var pizza = new Food;
pizza.timeToPrepare(); //3
pizza.timeToMake(); //6
pizza.timeToEat(3); //9
})();
谢谢!