有人可以解释一下javascript中的继承是如何工作的

时间:2014-10-07 12:00:38

标签: javascript oop inheritance prototypal-inheritance

有人可以解释一下我的继承如何在javascript(JS)中运行, 我经历了很多教程,但我无法理解它的成就。 即使日夜也没有结果..

我所经历的是:

console.log('Initialized..')

function Animal() {
    this.species = "animal";
}

Animal.prototype.category = function (){
    alert(this.species);
}

function Dog(){
    this.Animal();
}

copyPrototype(Dog, Animal)
var d = new Dog();
d.category();

来自http://www.sitepoint.com/javascript-inheritance/

的参考教程

1 个答案:

答案 0 :(得分:2)

在我看来,http://www.letscodejavascript.com/v3/episodes/lessons_learned/12是理解我们在尝试使用JavaScript工作的经典OOP时滥用的机制的最佳资源。

当有人告诉我必须在JS中使用OOP时,我会这样做。这可能是我在某个地方上网的东西。无论如何,这里是:

/// Make this script available somewhere
var extendsClass = this.extendsClass || function (d, b) {
    function __inheritedProto() { this.constructor = d; }
    __inheritedProto.prototype = b.prototype;
    d.prototype = new __inheritedProto();
}

var Animal = (function() {
    function Animal(data) {
        this.value = data;
    }
    Animal.prototype.method = function() {
        return this.value;
    };
    return Animal;
})();

var Dog = (function(_super) {
    extendsClass(Dog, _super);
    function Dog() {
        _super.apply(this, arguments);
    }
    Dog.prototype.method2 = function() {
        return this.value * 2; //do something else
    };
    return Dog;
})(Animal);

/// Create some instances
var animal = new Animal(1);
var dog = new Dog(2);


/// Call some methods
animal.method();  // 1
dog.method(); // 2
dog.method2();// 4