я следующий фрагмент кодаJavascript новый с твердый переплет
function foo(a) {
this.a = a;
}
var obj = {a: 77};
var bar = function() {
return foo.apply(obj, arguments);
};
var o = new bar(2);
console.log(o.a); // I think it's 2(why is it undefined?)
console.log(obj.a); // obj.a changed to 2, got it.
Почему o.a
не определено? также, если я удалю ключевое слово return
в bar
, он все равно будет таким же.
function foo(a) {
this.a = a;
}
var obj = {a: 77};
var bar = function() {
foo.apply(obj, arguments);
};
var o = new bar(2);
console.log(o.a); // I think it's 2(why is it undefined?)
console.log(obj.a); // obj.a changed to 2, got it.
Вопрос на самом деле то, что происходит, когда твердый переплет и новое связывание происходит то же самое время
Возможно, 'return new foo.apply (obj, arguments);' и 'var o = bar (2);' вместо 'var o = new bar (2);'? – Xufox
Я не совсем уверен, что вы просите.Вы никогда не используете 'this' внутри' bar', поэтому зачем 'o' устанавливать какие-либо данные? – zzzzBov
'return new (foo.bind.apply (foo, [null] .concat ([]. Slice.call (arguments)))); var o = bar (2) '. Вы можете сделать это более легко в ES6. – elclanrs