我希望在创建时扩展一个新的JS对象,其他对象传递一个参数。 这段代码不起作用,因为我只能在没有动态参数的情况下扩展对象。
otherObject = function(id1){
this.id = id1;
};
otherObject.prototype.test =function(){
alert(this.id);
};
testObject = function(id2) {
this.id=id2;
};
testObject.prototype = new otherObject("id2");/* id2 should be testObject this.id */
var a = new testObject("variable");
a.test();
有什么建议吗?
答案 0 :(得分:5)
除了明显的语法错误之外,正确的JavaScript继承方式是:
// constructors are named uppercase by convention
function OtherObject(id1) {
this.id = id1;
};
OtherObject.prototype.test = function() {
alert(this.id);
};
function TestObject(id2) {
// call "super" constructor on this object:
OtherObject.call(this, id2);
};
// create a prototype object inheriting from the other one
TestObject.prototype = Object.create(OtherObject.prototype);
// if you want them to be equal (share all methods), you can simply use
TestObject.prototype = OtherObject.prototype;
var a = new TestObject("variable");
a.test(); // alerts "variable"
您可以在网上找到很多有关此内容的教程。
答案 1 :(得分:0)
我并不完全明白你的意愿,但是
otherObject.prototype.test = function () {
alert(this.id);
};
是正确的。
这个
testObject.prototype = new otherObject(id2);
除非之前设置了id2,否则将无效。
尝试以下
var OtherObject = function () {
}
OtherObject.prototype.test = function () {
alert (this.id);
}
var TestObject = function (id) {
this.id = id;
}
TestObject.prototype = new OtherObject ();
var a = new TestObject("variable");
a.test ();
答案 2 :(得分:0)
修正了你的代码
otherObject = function(id1){
this.id = id1;
};
otherObject.prototype.test =function(){
alert(this.id);
};
testObject = function(id2) {
this.id=id2;
};
testObject.prototype = new otherObject("id2");/* id2 should be testObject this.id */
var a = new testObject("variable");
a.test();
答案 3 :(得分:0)
testObject = function(id2) {
otherObject.call(this, id2); // run the parent object constructor with id2 parameter
this.id=id2;
};
testObject.prototype = new otherObject(); // no id2 parameter here, it doesn't make sense
请注意,在创建testObject
的实例时,otherObject
的构造函数被调用两次 - 一次创建原型,一次初始化对象。
为了防止重复初始化,我们可以在我们仅使用它来创建原型时立即停止构造函数。
otherObject = function(id1){
if (typeof id1 == 'undefined') {
/* as there is no parameter, this must be the call used to create
* the prototype. No initialisation needed here, we'll just return.
*/
return;
}
this.id = id1;
};
P.S。请使用资金camelcase与对象。