具有原型的对象中的对象文字,带有函数参数

时间:2018-03-04 13:58:48

标签: javascript object-literal

我有一个内部有一个函数的对象和一个对象文字:

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.

如何在原型中使用公共函数或在对象文字中传递参数?

1 个答案:

答案 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);
};