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 に答える