Javascript使用父属性实例化子类

时间:2012-03-05 14:23:19

标签: javascript oop

我是Javascript的新手,只需要掌握这个。

如果我有一个属性

的类
function myClass(){
this.foo=null;
}

然后我使用继承来创建子类

myChild.prototype = new myClass(); 

function myChild(){
alert(this.foo);
}

如何在实例化子类时设置foo的属性,例如我想提醒'bar'。我不想简单地将'bar'传递给myChild,因为我有一个要设置的属性列表,它们与myClass中的方法相关,而不是myChild。

var newChild = new myChild();

3 个答案:

答案 0 :(得分:0)

你可以在子的构造函数中设置属性,如下所示:

myChild.prototype = new myClass(); 

function myChild(){
   this.foo = "bar";
}

这就是你想要的吗?

或者,如果您想要灵活地了解每个实例中包含foo的内容,您可以在实例化子类后立即设置它:

 var child = new myChild();
 child.foo = "bar";

答案 1 :(得分:0)

参数化你的构造方法。

function myClass(foo){
    this.foo=foo;
}
myChild.prototype = new myClass('bar'); 

function myChild(){
    alert(this.foo);
}
var newChild = new myChild();

或:

 function myClass(){
        this.foo=null;
    }
    myChild.prototype = new myClass(); 
    myChild.prototype.foo = 'bar';
    function myChild(){
        alert(this.foo);
    }
    var newChild = new myChild();

答案 2 :(得分:0)

您实际上也可以找到这个问题的答案in my answer to previous question,它类似于其他语言的继承。

如果扩展一个类,子类的构造函数必须接受自己的参数为父类的参数。所以假设你有:

function Parent(a) {
    this.foo = a;
};

// and 

function Child(b, a) {
    Parent.call(this, a); // executes the parent constructor for this instance
    this.bar = b;
    alert(this.foo);
};

inherits(Parent, Child);

inherits的实施可以在this answer)中找到。

Child内,您必须调用父类的构造函数并传递参数,类似于您在Java或Python中的操作方式。

如果您有许多参数,那么您可以使用arguments对象,以使事情变得更容易:

function Parent(a, b, c, d) {...};

function Child(e, f) {
   // c and d are parameters for `Child`
   // arguments[0] == e
   // arguments[1] == f
   // all other arguments are passed to Parent, the following
   // creates a sub array arguments[2..n]
   Parent.apply(this, [].slice.call(arguments, 2); 
   /...
}

// later

var child = new Child(e, f, a, b, c, d);

通常,myChild.prototype = new myClass();不是一个好的继承模式,因为大多数时候,类都需要一些参数。这不会为每个实例执行父构造函数,但只对所有实例执行一次。