我有一个内部有一个函数的对象和一个对象文字:
function SomeThing() {
var self = this;
self.publicFunction = function() {...}
self.choose = function(data) {
var script = {
one: self.one,
two: self.two,
};
return (script[data.type])(data);
};
};
SomeThing.prototype.one = function one(data) {
console.log(this);
this.publicFuntion();
...
};
...
我需要将一些参数传递给附加原型的函数。但是当我这样做return ...(data)
时,内部的publicFuntion无法访问。
var some = new SomeThing();
some.choose(data); // data.type === 'one'
// -> undefined
// -> Cannot read property 'publicFunction' of undefined.
如何在原型中使用公共函数或在对象文字中传递参数?
答案 0 :(得分:1)
您正在调用script
对象上的方法,而不是SomeThing
实例。使用call
明确设置接收器
…choose = function(data) {
var script = {
one: self.one,
two: self.two,
};
return script[data.type].call(self, data);
};
或者只是删除script
对象并直接使用
…choose = function(data) {
if (["one", "two"].includes(data.type))
return self[data.type](data);
};