gpt4 book ai didi

javascript - getPrototypeOf 与 isPrototypeOf

转载 作者:行者123 更新时间:2023-12-03 02:33:31 25 4
gpt4 key购买 nike

我正在阅读你不懂JS,并且混淆了 getPrototypeOf 和 isProtytypeOfs 的结果。代码如下:

<html>
<script>
function Foo(name) {
this.name = name;
};

Foo.prototype.myName = function() {
return this.name;
};

function Bar(name, label) {
Foo.call(this, name);
this.label = label;
};

Bar.prototype = Object.create(Foo.prototype);
Bar.prototype.myLabel = function() {
return this.label;
};

var a = new Bar("a", "obj a");
console.log("getPrototypeOf:", Object.getPrototypeOf(a));
console.log("Foo.prototype.isPrototypeOf(a):", Foo.prototype.isPrototypeOf(a));
console.log("Object.getPrototypeOf(a) === Foo.prototype:", Object.getPrototypeOf(a) === Foo.prototype);
console.log("Bar.prototype.isPrototypeOf(a):", Bar.prototype.isPrototypeOf(a));
console.log("Object.getPrototypeOf(a) === Bar.prototype:", Object.getPrototypeOf(a) === Bar.prototype);
</script>

结果如下(chrome 64):

getPrototypeOf:Foo {myLabel:f}

Foo.prototype.isPrototypeOf(a): true

Object.getPrototypeOf(a) === Foo.prototype: false

Bar.prototype.isPrototypeOf(a): true

Object.getPrototypeOf(a) === Bar.prototype: true

为什么 Foo.prototype.isPrototypeOf(a) 为 true 但“Object.getPrototypeOf(a) === Foo.prototype”为 false?

最佳答案

逻辑在这里:

console.log(a instanceof Bar);//true
console.log(Object.getPrototypeOf(a));//Foo { myLabel: [Function] }
console.log(Object.getPrototypeOf(a) instanceof Foo);//true
console.log(Object.getPrototypeOf(Object.getPrototypeOf(a))===Foo.prototype);//true

实际上,您可以更改代码:

Bar.prototype = Object.create(Foo.prototype);

Bar.prototype = new Foo();

结果还是一样,虽然两种方式有点不同,但可能会更容易理解。

正如@Bergi所说,Foo.prototype只是在a的原型(prototype)链中,而不是“Direct”原型(prototype)。

关于javascript - getPrototypeOf 与 isPrototypeOf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48633621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com