为什么属性返回undefined而不是object?

时间:2016-02-23 23:35:56

标签: javascript

在第一个警报(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();

2 个答案:

答案 0 :(得分:2)

因为函数local与对象没有任何关系。您可以将该功能放在文件的顶部,它将以完全相同的方式工作。

您可以local.apply(this);thiscall方法传递给函数,但您也可以将local作为原型函数。

答案 1 :(得分:1)

local中的

this范围限定为全局对象(窗口)。为了使本地函数作用于您期望的此绑定(来自ChildModel),您需要从原型调用中传递此绑定。

ChildModel.prototype.call = function() {
    local.call(this);
}