3

我想在创建其他传递参数的对象时扩展一个新的 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();

有什么建议吗?

4

4 回答 4

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"

你会在网上找到很多关于这个的教程。

于 2012-07-23T14:10:24.577 回答
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;
};

PS 请使用大写的驼峰箱来装物品。

于 2012-07-23T14:11:37.597 回答
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 ();
于 2012-07-23T14:06:20.243 回答
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();
于 2012-07-23T14:06:46.273 回答