var Person = function(name, age){
return Object.create(Object.prototype, {
name: {
value: name | "",
writable: true,
enumerable: true,
configurable: true
},
age: {
value: age | "",
writable: true,
enumerable: true,
configurable: true
}
});
};
var Boy = function(name, age){
return Object.create(Person(name, age), {
gender: {
value: "male"
}
});
};
var p = Person("John", 28);
var b = Boy();
console.log(p.isPrototypeOf(b)); // false?
我正在尝试理解object.create以及如何最好地使用它,避免使用构造函数new
关键字。到目前为止,我正在接近它(虽然可能不是最好的方法,只是试验和错误) - 并且遇到了如果我使用object.create
我不再能够检查instanceof
和对象类型。
有人建议使用isPrototypeOf来检查 - 我做错了,因为上面的代码在检查时会返回false
。
有人会善意地解释我哪里出错吗?我仍然是javascript中原型继承的新手。
答案 0 :(得分:2)
当然p不是b的原型。
那是因为Person
函数每次都返回一个新的Object。
尝试以下
var Boy = function(person, name, age){
return Object.create(person, {
gender: {
value: "male"
}
});
};
var p = Person("John", 28);
var b = Boy(p);
assert(p.isPrototypeOf(b))