2013-05-22 2 views
1

Если я добавляю свойство Object.prototype, например Object.prototype.sth = "something";Есть ли способ скрыть свойство Object.prototype?

then, есть ли способ скрыть свойство для заданного объекта? Я пытался так:

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

однако, бар все еще имеют доступ к собственности СТГ;


bar.__proto__ = null или Foo.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.prototype с null, атрибуты 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 (нуль)).

Смежные вопросы