2
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 中的原型继承仍然很陌生。

4

1 回答 1

2

当然 p 不是 b 的原型。

那是因为Person函数每次都返回一个新的对象。

尝试以下

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))
于 2012-03-01T18:41:07.870 回答