似乎只有当我直接在Base函数中填写子对象时,这才是getSettings函数可以正确看到this.name属性的唯一方法,但是我试图将我的对象放在不同的文件中以避免有一个大文件。
***child.js***
module.exports : {
getSettings: ()=>{
return this.name === 'foobar'
}
}
***base.js***
var Child = require('./child.js')
function Base(){
this.name = 'foobar'
this.child = Child
this.child2 = {}
for (var prop in Child){
this.child2[prop] = Child[prop]
}
this.child3 = {
getSettings: ()=>{
return this.name === 'foobar'
}
}
}
***index.js****
var Base = require('./base.js')
var b = new Base()
b.child.getSettings() //FAILS BECAUSE this.name is undefined
b.child2.getSettings() //FAILS BECAUSE this.name is undefined
b.child3.getSettings() //PASSES. this.name is defined
答案 0 :(得分:0)
在JS OOP中,通常将类实例称为this
,因此从语义上来说,child
对象将父对象称为this
是不正确的。这也使得使用像child
这样的对象(如this
那样无法像词汇child3
那样获得理想的上下文)变得困难。
child
对象可能应该是一个以父实例作为依赖项注入的类。
module.exports = class Child(parent) {
constructor(parent) {
this.parent = parent;
}
getSettings() {
return this.parent.name === 'foobar'
}
}
var Child = require('./child.js')
function Base(){
this.name = 'foobar'
this.child = new Child(this);
...
}