2015-03-14 3 views
1

Я заметил, что при использовании bind на объекте вы теряете возможность доступа к прототипу.Доступ к прототипу после использования привязки

function Foo(obj) { 
 
    this.fields = obj; 
 
} 
 

 
function Make(obj) { 
 
    return Foo.bind(Foo, obj); 
 
} 
 

 
var Test = Make({ 
 
    name: 'Jeff' 
 
}); 
 

 
console.log(Test.prototype);

Вот тот же самый пример, не используя bind:

function Foo(obj) { 
 
    this.fields = obj; 
 
} 
 

 
function Make(obj) { 
 
    return Foo; 
 
} 
 

 
var Test = Make({ 
 
    name: 'Jeff' 
 
}); 
 

 
console.log(Test.prototype);

Есть ли способы обойти это?

+0

Что вы на самом деле пытаетесь достичь? Нет никакого способа обойти это, поскольку вопрос написан, но если бы мы знали, ПОЧЕМУ вы хотите использовать привязку и получить доступ к прототипу, вы, вероятно, получите несколько ответов. –

+0

, если вы видите [Спецификация языка ECMAScript®] (http://www.ecma-international.org/ecma-262/5.1/#sec-15.3.4.5): _NOTE Объекты функции, созданные с использованием функции.prototype.bind, не имеют свойство прототипа или [[Code]], [[FormalParameters]] и [[Scope]] внутренние свойства ._ – Grundy

ответ

0

Итак, судя по документам. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind

Связать функцию с определенным объектом, чтобы переменные внутри этого объекта всегда использовались. поэтому, когда вы вызываете console.log в своем примере, вы регистрируете прототип функции Test. Не объект Test. Таким образом, вы получаете неопределенное.

Для того, чтобы получить объект, который вы хотите попробовать это:

console.log(new Test()) 
Смежные вопросы