将子对象添加到对象

时间:2016-08-12 18:27:38

标签: javascript object

我正在尝试将子对象添加到像

这样的对象
var myObj = myObj || {};
myObj.prototype.subObj = {
  'funk': function() {
    console.log('Funky success');
  }
};

但我一直收到错误

  

未捕获的TypeError:无法设置未定义的属性“subObj”

4 个答案:

答案 0 :(得分:2)

如果要使用原型,则必须使用函数创建对象:

function myObj() { }

myObj.prototype.subObj = {
  'funk': function() {
    console.log('Funky success');
  }
};

var obj = new myObj();
obj.subObj.funk(); // => 'Funky success'

但你总能这样做:

var myObj = {}

myObj.subObj = {
      'funk': function() {
        console.log('Funky success');
      }
    };

myObj.subObj.funk(); // => 'Funky success'

答案 1 :(得分:0)

let myObj = {
    subObj: {
        funk: function () {
            // whatever
        }
    }
}

答案 2 :(得分:0)

除非myObj.prototype.subObj已存在且包含对象,否则您无法分配到myObj.prototype。 Javascript不会自动在层次结构中创建中间对象。所以你可以这样做:

var myObj = myObj || { prototype: {} };
myObj.prototype.subObj = {
  'funk': function() {
    console.log('Funky success');
  }
};

答案 3 :(得分:0)

以与ES6中的方法非常相似的方式,你可以安全地做到这一点;

var myObj = myObj || {};
myObj.__proto__.subObj = {
  'funk': function() {
    console.log('Funky success');
  }
};

myObj.subObj.funk();

但您也可以使用Object.create()方法,如下所示;

var prototype = {
                 subObj : {
                           funk: function() {
                                   console.log('Funky success');
                                 }
                          }
                },
        myObj = myObj || Object.create(prototype);
myObj.subObj.funk();