原型:用于访问实例范围的“ this”的深范围

如何缓存最高范围,以便以后在原型中更深入地使用,如下所示:


var Game = function(id){

   this.id = id;

};


Game.prototype = {

  board : {

    init: function(){

       // obviously "this" isn't the instance itself, but will be "board"

       console.log(this.id);

    }

  }

}


var game = new Game('123');

game.board.init(); // should output "123"

更新:

好了,现在我考虑一下,我可以使用apply/ call并传递上下文...


game.board.init.apply(game);


红颜莎娜
浏览 450回答 3
3回答

侃侃无极

这样做是一个非常糟糕的主意,因为在某些情况下它会导致非常奇怪的行为,但是有可能:var Model = function(x) { this.x = x };Object.defineProperty(Model.prototype, 'a', (function() {  var lastSelf;  function get() { return lastSelf.x }  get.on = function () { return lastSelf.x * 2 };  return { get() { lastSelf=this; return get } };})());var m = new Model(17);console.log(m.a(), m.a.on());为什么?我在下面看到您的答案,试图了解哪些是不好的情况。您不能传递a变量。获取相同对象的属性后,必须on立即授予对以下内容的访问权限a:var m1 = new Model(1), m2 = new Model(3);console.log(m1.a(), m2.a(), m1.a.on(), m2.a.on()); // 1 3 2 6 - okvar a1 = m1.a, a2 = m2.a;console.log(m1.a(), m2.a(), a1.on(), a2.on()); // 1 3 6 6 - ooops!console.log(m1.a(), m2.a(), m1.a(), a1.on(), a2.on()); // 1 3 1 2 2 - ooops!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript