向对象添加新方法和值,同时避免重复

Son*_*man 1 javascript jquery

我正在努力学习面向对象的JavaScript.我有一个对象构造函数,如下所示:

//generic object
function myObject(value1, value2, value3){
this.value1 = value1;
this.value2 = value2;
this.value3 = value3;
this.method1 =method1;
}

function method1(){
alert('hello');
}

function method2(){
alert('hello again');
}
Run Code Online (Sandbox Code Playgroud)

我正在创建这个对象的新实例,如下所示:

instance1 = new myObject(
1, //value1
2, //value2
3  //value3
)
Run Code Online (Sandbox Code Playgroud)

我的问题是:在myObject的几个实例上,我需要自定义值和方法.我想在创作时添加它们.但我无法弄清楚如何在不重新编写实例名称的情况下这样做,我试图避免,因为它会显着减慢添加新对象的过程.

有没有办法替换这个代码..

 instance1 = new myObject(
 1, //value1
 2, //value2
 3  //value3
 )
 instance1.method2 =method2;
 instance1.value4 =4;
Run Code Online (Sandbox Code Playgroud)

..有些东西不需要重复名称"instance1"?

Pau*_*aul 5

您可以在MyObject上创建更新功能 prototype

function MyObject(value1, value2, value3){
    this.value1 = value1;
    this.value2 = value2;
    this.value3 = value3;
    this.method1 =method1;
}

MyObject.prototype.update = function( args ) {
    for(var name in args) {
        this[ name ] = args[ name ];
    }
};

//using it
var instance1 = new MyObject( 1, 2, 3 );
instance1.update( {
    method2: method2,
    value4: 4
});
Run Code Online (Sandbox Code Playgroud)

需要注意的是,我将构造函数的名称从myObject更改为MyObject.在JavaScript中,构造函数是带有pascal case而不是camel case的名称.这样,当开发人员看到一个pascal case函数时,他们知道他们需要使用new关键字.你可以在这里阅读更多内容:http://elegantcode.com/2010/12/21/basic-javascript-part-4-enforcing-new-on-constructor-functions/

我还推荐作为一个新的JS开发人员来看看Learn jQuery and JavaScriptAppendTo.com上的这个免费系列http://learn.appendto.com/