我想克隆一个 javascript 类. 将方法添加到克隆的属性中,而不实际覆盖现有方法

I want to clone a javascript class. add methods to the cloned property without actually overwriting the exisiting methods?

本文关键字:属性 不实际 有方法 覆盖 添加 一个 javascript 方法      更新时间:2023-09-26

我正在尝试将方法添加到克隆的原型类属性中。我已经粘贴了下面的代码。

在我向这段代码添加方法的那一刻,它会过度写入超类中定义的内容。

<script src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.3/prototype.js" type="text/javascript"></script>
<script type="text/javascript">
var Animal = Class.create({
    initialize: function(name, sound) {
    this.name  = name;
    this.sound = sound;
    },
    speak: function() {
    alert(this.name + " says: " + this.sound + "!");
    }
});
Animal.movement = {
    move: function(direction){
        alert('moving: ' + direction)
    }
}
var AnimalClone = { }
Object.extend(AnimalClone, Animal);
//Now i want to add 'jump' to this list of methods 
//without over writing the inherited 'move' method
AnimalClone.movement = {
    jump: function(height){
        alert('jumped:' + height)
    }
}
</script>

您需要扩展movement对象,而不是覆盖它:

Object.extend(AnimalClone.movement, {
    jump: function(height){
        alert('jumped:' + height)
    }
});

由于movement是一个对象,因此您还必须通过使用原型访问它来扩展它

var Animal = Class.create({
    initialize: function(name, sound) {
        this.name = name;
        this.sound = sound;
    },
    movement: {
        move: function(direction) {
            alert('moving: ' + direction);
        }
    }
});
var AnimalClone = Class.create({});
AnimalClone.prototype = Object.extend(new Animal(),{});
AnimalClone.prototype.movement = Object.extend(AnimalClone.prototype.movement, {
        jump: function(height) {
            alert('jumped:' + height);
        }
});
var animalClone = new AnimalClone;
animalClone.movement.move("up");
animalClone.movement.jump("10mts");