如果我有一个带有许多参数的构造函数:
var Mammal = function(name, weight) {
this.name = name;
this.weight = weight;
}
Mammal.prototype.makeSound = function(sound) {
alert(sound);
}
Mammal.prototype.getName = function() {
return this.name;
}
我想做一些遗产:
var Human = function(name,weight,language,location) {
//code
}
Human.prototype = new Mammal();
在最后一行中,不是人类原型得到的名称和重量参数未定义?我一直看到这段代码....我知道人类构造函数正在被赋予名称和权重参数,但是原型获得这些未定义的值似乎很混乱。我知道这只有效,因为javascript足够松弛,可以让你这样做。有没有办法绕过这个?
答案 0 :(得分:2)
你到底困扰什么?
Human.prototype = new Mammal();
alert( Human.prototype.name ); // undefined
alert( Human.prototype.foo ); // undefined
你可以认为他们不在那里。你不写的原因是:
Human.prototype = Mammal.prototype;
是因为Mammal
构造函数可以添加原型对象上没有的方法。
var Mammal = function(name, weight) {
this.name = name;
this.weight = weight;
this.somefun = function() {
// this can't be inhereted by
// Mammal.prototype
}
}
为了不让自己重新开始,你可以使用 Constructor Chaining :
var Human = function(name,weight,language,location) {
this.language = language;
this.location = location;
// call parent constructor
Mammal.apply(this, arguments);
}
这似乎更直截了当,不是吗?您调用父构造函数来处理name
和weight
参数,而您只关心Human
构造函数中的Human
个特定事物。
答案 1 :(得分:1)
我想我曾经见过这样的事情:
var Human = function(name,weight,language,location) {
Mammal.call(this, name, weight);//calls the parent constructor
this.language = language;
this.lcoaiton = location;
}
Human.prototype = new Mammal();