2015-10-27 8 views
0
function func() {} 

func.prototype.foo = "Var" 

console.log(func.foo) // undefined 

var foonew = new func() 

console.log(foonew.foo) // Var 

Почему func.foo не может найти свойство прототипа ??Как работает прототип Javascript и делегирование делегаций?

function func() {} 

func.__proto__.foo = "Var" 

console.log(func.foo) // Var 

var foonew = new func() 

console.log(foonew.foo) // undefined 

При использовании прото ссылку на прототип он выглядит как поведение восстанавливается.

+0

@Vohuman. Я не хочу сравнивать свойства __proto__ и прототипа. Я пытаюсь понять, почему конкретный поиск не работает. –

+0

Вопрос и принятый ответ, что @Vohuman связаны четко объясняет, почему ваш первый поиск не работает. Это также объясняет, почему вы не должны изменять '__proto__', что объясняет второй поиск. – rockerest

ответ

0

Вы вводите в заблуждение [[Прототип]] с помощью prototype.

[[Prototype]], также известный как __proto__, является внутренним свойством, которое определяет, из какого объекта должен наследоваться текущий объект.

prototype - свойство конструкторов, которое определяет [[Прототип]] вновь созданных экземпляров.

Это полностью объяснено в __proto__ VS. prototype in JavaScript.

Вы можете достичь обоих поведений, установив [[Prototype]] конструктора на его prototype. Вы можете использовать setPrototypeOf (или __proto__) для этого:

function func() {} 
Object.setPrototypeOf(func, func.prototype); 
func.prototype.foo = "Var"; 

func.foo;  // "Var" 
new func().foo; // "Var" 

Я не рекомендую, хотя.

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

  • Нет связанных вопросов^_^