使用 JavaScript 对象字面量表示法的 JavaScript 构造函数

新手上路,请多包涵

使用对象文字表示法在 JavaScript 中构建构造函数的最佳方法是什么?

 var myObject = {
 funca : function() {
  //...
 },

 funcb : function() {
  //...
 }
};

我希望能够打电话

var myVar = new myObject(...);

并将参数传递给 myObject 中的构造函数。

原文由 mrwooster 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 293
2 个回答

不是“JSON notation”,这是 JavaScript object literal notation 。 JSON 只是 JS 对象字面量表示法的一个子集,但除了看起来相似之外,它们没有任何共同点。 JSON 用作 数据交换 格式,如 XML。

您想做什么是不可能的。

 var myObject = {};

已经创建了一个对象。没有什么可以实例化。

但是,您可以创建构造函数并将方法添加到其原型:

 function MyObject(arg1, arg2) {
    // this refers to the new instance
    this.arg1 = arg1;
    this.arg2 = arg2;

    // you can also call methods
    this.funca(arg1);
}

MyObject.prototype = {
 funca : function() {
  // can access `this.arg1`, `this.arg2`
 },

 funcb : function() {
  // can access `this.arg1`, `this.arg2`
 }
};

您使用 new MyObject() 实例化的每个对象都将继承原型的属性(实际上,实例只是获得对原型对象的引用)。

有关 JavaScript 对象和继承的更多信息:


更新2:

如果你必须实例化许多同类对象,那么使用构造函数+原型。如果您只需要 一个 对象(如单例),则无需使用构造函数(大多数情况下)。您可以直接使用对象文字表示法来创建该对象。

原文由 Felix Kling 发布,翻译遵循 CC BY-SA 2.5 许可协议

使对象成为一个函数,如下所示:

 var myObject = function(arg1){
  this.funca = function(){
    //...
  };
  this.funcb = function(){
    //...
  };
  this.constructor = function(obj){
    alert('constructor! I can now use the arg: ' + obj.name);
  };
  this.constructor(arg1);
};

// Use the object, passing in an initializer:
var myVar = new myObject({ name: 'Doug'});

原文由 Simeon 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题