我对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中的查找类。