我有一个像这样的js对象:
let service = function () {
this.a = 100;
}
service.prototype.func = function() {
console.log(this.a)
}
service.prototype.func2 = function () {
console.log('func2')
this.func();
}
service.prototype.obj = {
m: {
n: {
o: function() {
this.func2();
},
p: service.prototype.func2.bind(service.prototype)
}
}
}
我想从o或p访问'a',这是代码:
let s = new service();
console.log(s.a)
s.func()
s.func2()
s.obj.m.n.p()
s.obj.m.n.o()
,输出
100
100
func2
100
func2
undefined
test.js:20
this.func2();
^
TypeError: this.func2 is not a function
我是否知道如何正确编写o / p以执行func2?
答案 0 :(得分:-1)
这个怎么样?
var service = function() {
this_ = this;
this.a = 100;
}
service.prototype.func = function() {
console.log(this.a)
}
service.prototype.func2 = function() {
console.log('func2')
this.func();
}
service.prototype.obj = {
m: {
n: {
o: function() {
this_.func2();
},
p: service.prototype.func2.bind(service.prototype)
}
}
}
var s = new service();
console.log(s.a)
s.func()
s.func2()
s.obj.m.n.p()
s.obj.m.n.o()
更新:
正如Jaromanda X所指出的那样,我正在更新代码,以便在不定义全局变量的情况下执行OP所需的内容(我忘记了这一点)。
var service = function(v) {
this.a = v;
this.obj = this.objFunc(this);
}
service.prototype.func = function() {
console.log(this.a)
}
service.prototype.func2 = function() {
console.log('func2')
this.func();
}
service.prototype.objFunc = function(self) {
return {
m: {
n: {
o: function() {
self.func2();
},
p: service.prototype.func2.bind(service.prototype)
}
}
};
}
var s = new service(100);
var s2 = new service(200);
s.func();
s2.func();
s.obj.m.n.o());
s2.obj.m.n.o());
此代码与OP代码之间的区别在于obj是每个服务实例的属性,而OP的代码将obj设置为服务类的通用属性。
另外,我设置obj属性来调用objFunc类,这样他就可以像s.obj.m.n.o()那样访问它。如果我不这样做,他将不得不以s.obj()。m.n.o()来访问它。
我希望这是他想到的和想要的。