2015-06-17 43 views
1
function Foo (name) { 
    this.name = name; 
} 

Foo.prototype.bar = { 
    n: function() { 
     // How to get here after initializing the object foo? 
    } 
}; 

var a = new Foo('John'); 
console.log(a.bar.n()) 

如何在初始化对象foo后进入此处?初始化后获取原型对象的属性

+0

这种模式通常不会被利用,因为您需要跳过一些箍环才能使其工作。是不是真正的惯用JavaScript。 –

+0

我知道,但仍然.. – Aleksandr

+1

你是什么意思的“如何到达这里?” – rsp

回答

1

为了给你一个什么样的需要得到那个工作的想法,这里有一个演示:

function Foo (name) { 
 
    this.name = name; 
 
} 
 

 
Object.defineProperty(Foo.prototype, "bar", { 
 
    get: function() { 
 
     var that = this; 
 
     return { 
 
      n: function() { 
 
       return that.name 
 
      } 
 
     } 
 
    } 
 
}); 
 

 
var a = new Foo('John'); 
 
document.querySelector("pre").textContent = a.bar.n();
<pre></pre>

会发生什么事是,bar财产变成创建并返回一个getter具有关闭this值的新函数的新对象。

这意味着每次访问该属性时都会产生一些开销。这种技术是必要的,因为当访问属性时,对象和属性之间的唯一关系就会发生。之后,这种关系被遗忘了。

因此,原型遗传的几乎所有好处都丢失了。这应该被认为是IMO仅用于学术目的。

+0

非常好!谢谢! – Aleksandr

+1

不客气。 –