我希望man对象继承自person对象。我可以使用new运算符完成它,但它应该与Object.create
一起使用。但为什么它不起作用? console.log
代表undefined
而不是预期的hello
。
function person() {
this.say="hello";
}
function man() {
this.name="John Miler";
}
man.prototype = Object.create(person);
var Johnny = new man();
console.log(Johnny.say);
答案 0 :(得分:3)
你的问题是双重的。
Object.create
应该传递prototype
,而不是构造函数。在这种情况下,您应该使用Object.create(person.prototype);
,而不是Object.create(person);
调用构造函数时会添加say
属性,而您永远不会从子构造函数中调用父构造函数。
根据您的行为,有几种方法可以解决这个问题。
call
父构造函数。person.call(this);
function person() {
this.say="hello";
}
function man() {
person.call(this);
this.name="John Miler";
}
man.prototype = Object.create(person.prototype);
var Johnny = new man();
console.log(Johnny.say);

person.prototype.say = "hello";
function person() {
}
person.prototype.say = "hello";
function man() {
this.name="John Miler";
}
man.prototype = Object.create(person.prototype);
var Johnny = new man();
console.log(Johnny.say);

答案 1 :(得分:0)
如果您尝试实现的是man对象继承person对象,请尝试:
// superclass
function Person() {
this.say = "hello";
}
// superclass method
Person.prototype.doStuff = function() {
console.info('Stuff done.');
};
// subclass
function Man() {
Person.call(this); // call super constructor.
this.name="John Miler";
}
// subclass extends superclass
Man.prototype = Object.create(Person.prototype);
Man.prototype.constructor = Man;
var Johnny = new Man();
console.log(Johnny.say); // hello
答案 2 :(得分:0)
Object.create应该传递给原型而不是构造函数。
function person() {
this.say="hello";
}
function man() {
this.name="John Miler";
}
man.prototype = Object.create(new person());
var Johnny = new man();
console.log(Johnny.say);