代码之家  ›  专栏  ›  技术社区  ›  Coli Culpepper

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

  •  1
  • Coli Culpepper  · 技术社区  · 7 年前

    我有一个对象,里面有一个函数和一个对象文字:

    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();
        ...
    };
    ...
    

    我需要将一些参数传递给附加了prototype的函数。但当我这么做的时候 return ...(data) 无法访问内部的PublicFunction。

    var some = new SomeThing();
    some.choose(data); // data.type === 'one'
    // -> undefined
    // -> Cannot read property 'publicFunction' of undefined.
    

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

    1 回复  |  直到 7 年前
        1
  •  1
  •   Bergi    7 年前

    您正在调用 script 对象,而不是 SomeThing 例子使用其中一个 call 显式设置接收器

    …choose = function(data) {
        var script = {
            one: self.one,
            two: self.two,
        };
        return script[data.type].call(self, data);
    };
    

    或者干脆放下 剧本 对象并直接使用

    …choose = function(data) {
        if (["one", "two"].includes(data.type))
            return self[data.type](data);
    };