我们可以通过将对象分配给Object.prototype
属性来为JavaScript中的对象创建原型。
function Animal() { };
Animal.prototype = {
constructor: Animal,
describe: function() {
console.log("This is an animal");
},
eat: function() {
console.log('Eating');
}
};
如果要向对象添加更多属性,则可以在派生对象(子对象)中以以下方式进行操作:
function Dog() {}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
Dog.prototype.bark = function() {
console.log('barking');
}
Dog.prototype.guard = function() {
console.log('guarding');
}
Dog.prototype.eat = function() {
console.log('Dog is Eating');
}
let tipu = Object.create(Dog.prototype);
tipu.bark();
tipu.guard();
tipu.eat();
但是,如果我不想每次都重复Dog.prototype
,该怎么办。我想像对父动物(Animal.prototype = {...}
一样)为子对象(下面的大象对象)的prototype属性分配一个对象。
function Elephant() { }
Elephant.prototype = Object.create(Animal.prototype);
Elephant.prototype.constructor = Elephant;
Elephant.prototype = {
play : function() {
console.log("Playing in the jungle");
},
eat : function() {
console.log("Elephant is eating");
}
}
let hathi = new Elephant();
hathi.eat();
hathi.play();
现在,当我这样做时,它会从子级中删除父级的describe()方法。
hathi.describe();
这将引发错误,但是tipu.describe();
可以正常工作。
我做错什么了吗?
答案 0 :(得分:0)
但是,如果我不想每次都重复
Dog.prototype
,该怎么办。我想为原型分配一个对象
然后做。
function Dog() {}
Dog.prototype = Object.assign(
Object.create(Animal.prototype),
{
constructor: Dog,
bark(){
console.log('barking');
},
guard(){
console.log('guarding');
},
eat(){
console.log('Dog is Eating');
}
}
);
或者您可以看看3年前推出的全新class Syntax。
class Dog extends Animal {
bark(){
console.log('barking');
},
guard(){
console.log('guarding');
},
eat(){
console.log('Dog is Eating');
}
}