2013-05-22 33 views
1

如果我添加一个属性到Object.prototype,如 Object.prototype.sth =“something”;有没有办法隐藏Object.prototype的属性?

那么,有没有办法隐藏指定对象的属性? 我想是这样的:

function Foo() { 
// sth... 
} 
Foo.prototype = null; 
var bar = new Foo(); 

然而, 酒吧仍然有机会获得财产事物;


bar.__proto__ = nullFoo.prototype.__proto__ = null工作

+1

为什么?你想做什么 ? –

+1

这是不可能的,但你可以看看这个答案:http://stackoverflow.com/a/2636719/2183827 – Deepsy

+0

我只是想了解原型链的概念... – Yon

回答

0

我认为要做到这一点的方法是:

function Foo() { 
     this.sth = null 
// or this.sth = undefined; 
    } 

    var bar = new Foo(); 
  • Foo.prototype = null;:在bar.__proto__将直接指向 Object.prototype
  • 没有Foo.prototype = null;:在bar.__proto__将指向Foo.prototype,并Foo.prototype.__proto__Object.prototype

另一种方式:

function Foo() { 
// sth... 
} 
Foo.prototype.sth = undefined; 
//or Foo.prototype.sth = null; 
var bar = new Foo(); 
+0

它只是添加一个属性到对象,以防止Javascript旅行原型链 – Yon

+0

@YOnder:我认为这是其中的一种方式。你可以使用Foo.prototype.sth undefined; –

+0

无论如何,你必须通过使用自己的属性或更近的原型属性来覆盖它。 –

0

其实,如果你重写Foo.prototypenull,在Foo的属性将被删除。

Foo.prototype.sth = 1; 
bar = new Foo(); # Creates {sth:1} 
Foo.prototype = null; 
bar = new Foo(); # Creates {} 

看看到documentation page

所有对象继承Object.prototype中的Object.prototype的方法和属性,虽然他们可能被覆盖(除了空原型的对象,即对象.create(NULL))。

相关问题