1
Parent = (function() {
    var parent = function(name) {
        this.name = name;
    };

    parent.prototype.dostuff = function() {
      console.log(this.name);  
    };

    parent.prototype.more = function() {
      console.log("this should be available on both ... " + this.name);  
    };

    return parent;
}());

Child = (function() {
    var child = function(name) {
        Parent.call(this, name);
        this.prototype = Object.create(Parent.prototype);
    };

    child.prototype.dostuff = function() {
      console.log("the child class ... " + this.name);
    };

    child.prototype.special = function() {
      console.log("only the child has this method");
    };

    return child;
}());

在上面,我的父对象有一个名为“more”的方法,但是当我像这样新建孩子时......我不能调用 more 方法,除非我手动将其原型化。我在上面遗漏了什么可以让我免费获得原型方法?

var first = new Parent("father");
var last = new Child("son");

使用工作 jsfiddle 更新

http://jsfiddle.net/kz7Xk/

4

1 回答 1

1

你在实例上设置原型,你应该在函数本身上设置它。

this在构造函数中是指对象本身,当你用new. 但是原型是用作构造函数的函数上的属性,而不是实例上的属性。

所以你想要这样的东西:

Child = (function() {
    var child = function(name) {
        Parent.call(this, name);
    };

    child.prototype = Object.create(Parent.prototype);

    child.prototype.dostuff = function() {
      console.log("the child class ... " + this.name);
    };

    child.prototype.special = function() {
      console.log("only the child has this method");
    };

    return child;
}());

Child 的原型被设置为一个新对象,其原型上带有 parent 的原型,允许它继承所有内容。

于 2013-05-02T01:55:58.633 回答