我对javascript变量继承有疑问。

我正在尝试创建一个小型库,但是无法将某些变量推入子库中。

首先,我创建了root函数:

function myLibrary(param) {
  this.param = param
}


后来我想在模块上进行扩展,因此我创建了第一个模块,并希望从param根目录获取myLibrary,但是它不起作用:

myLibrary.prototype.myModule = {
  test: function() {
    console.log(this.param) // doesn't work - logs "unknown"
  }
}


有什么办法可以使其工作?就像我所说的那样

myLibrary("foo").myModule.test();


foo被记录?

感谢您的任何帮助。

最佳答案

在匿名函数中的this上分配字段时,您正在分配给window对象。要使用原型继承,请将您的函数用作带有new关键字的构造函数,或手动分配__proto__字段。

此外,由于test位于单独的对象上,因此您将很难获得来识别正确的上下文。

因此,不要更改您的通话。我将更改您的库“自行构建”的方式,并使用封装而不是类。



function myLibrary(param) {
  var mylib = {};

  mylib.myModule = {
    test: function(){
      console.log(param);
    }
  };

  return mylib;
}

myLibrary("foo").myModule.test(); // logs foo





这是一种非常常见的模式,经常使用。

但是,如果您打算使用继承,请使用JavaScript中的查找类。

10-04 21:46
查看更多