JavaScript在创建对象时调用对象的成员函数的正确方法是什么?

时间:2015-12-18 18:01:03

标签: javascript oop

所以我的情况就像是

function MyObject ( data ) 
{
     // ... 
     this.MyMemberFunction = function ( ) { /* ... */ };
}

我希望在创建新MyMemberFunction时调用MyObject。所以我想要相当于

var myObjectInstance = new MyObject(allData);
myObjectInstance.MyMemberFunction();

function MyObject ( data ) 
{
     // ... 
     this.MyMemberFunction = function ( ) { /* ... */ };
     this.MyMemberFunction();
}
var myObjectInstance = new MyObject(allData);

但是我想知道是否有比其中任何一种更好,即更合适的方式?

2 个答案:

答案 0 :(得分:2)

对象的构造函数是您应该将对象初始化为正常工作状态的位置,并且应该在其中放置应该为对象的所有新创建调用的任何代码。对象具有从构造函数调用的.init()方法是非常常见的,该方法为对象执行公共设置代码。

因此,如果它包含应始终在所有新对象上调用的代码,则在构造函数中调用方法是正确的。

您还可以使用其他选项来定义方法。将它放在原型上而不是在构造函数中赋值它可能是有意义的。

function MyObject ( data ) {
     // ... 
     this.myMemberFunction();
}

MyObject.prototype.myMemberFunction = function ( ) { /* ... */ };


var myObjectInstance = new MyObject(allData);

注意:Javascript中的一个常见约定是构造函数以大写字母开头,但对于常规函数或成员以小写字母开头。由于构造函数应该以不同的方式调用(使用new),因此它会以不同方式识别它们。

注意:如果初始化方法不需要是可以从外部世界调用的公共方法,那么它不必是对象的实际公共方法。您可以将代码内联在构造函数中或私有函数中,该函数仅在对象文件的范围内可用。

答案 1 :(得分:0)

这是使用prototype的另一种选择:

var Person = function ( data ) 
{
  // ... 
  this.doSomething();
}

Person.prototype.doSomething = function ( ) { /* ... */ };

var myObjectInstance = new Person(allData);

但是,我不能说它“更好”,因为它肯定取决于你在发展什么