在第一个警报(this.child)中返回一个对象,第二个返回undefined,而我期望得到相同的结果。为什么以及如何解决它?
https://jsfiddle.net/7jnyozx1/2/
var Child = (function() {
function Child(data) {
}
return Child;
})();
var ChildModel = (function() {
function ChildModel(data) {
this.data = data;
this.child = new Child(data);
alert(this.child); // TEST OK : object
}
function local() {
alert(this.child); // TEST KO : undefined
}
ChildModel.prototype.call = function() {
local();
}
return ChildModel;
})();
data = "hello";
var childModel = new ChildModel(data);
childModel.call();
答案 0 :(得分:2)
因为函数local
与对象没有任何关系。您可以将该功能放在文件的顶部,它将以完全相同的方式工作。
您可以local.apply(this);
将this
从call
方法传递给函数,但您也可以将local
作为原型函数。
答案 1 :(得分:1)
this
范围限定为全局对象(窗口)。为了使本地函数作用于您期望的此绑定(来自ChildModel),您需要从原型调用中传递此绑定。
ChildModel.prototype.call = function() {
local.call(this);
}