我正在努力学习面向对象的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"?
您可以在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/
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |