Javascript 混淆prototype对象和object.getPrototypeOf()的关系

Javascript 混淆prototype对象和object.getPrototypeOf()的关系,javascript,Javascript,我是JS的新手。我正在读一本javascript书,对原型的概念感到困惑。书上说 JavaScript对象有一个指向另一个对象的链接,称为prototype,它们从中继承属性和方法。object是大多数对象的原型,但它也提供了一些直接使用的方法,而不是通过继承使用的方法,下面是一个示例: 我很困惑,因为Object是hat的原型,所以当我们试图得到hat的原型时,原型不就是对象本身吗?为什么我们仍然需要这样做: 让hatPrototype=Object.getPrototypeOf(hat)

我是JS的新手。我正在读一本javascript书,对原型的概念感到困惑。书上说

JavaScript对象有一个指向另一个对象的链接,称为prototype,它们从中继承属性和方法。object是大多数对象的原型,但它也提供了一些直接使用的方法,而不是通过继承使用的方法,下面是一个示例:

我很困惑,因为
Object
hat
的原型,所以当我们试图得到
hat
的原型时,原型不就是
对象本身吗?为什么我们仍然需要这样做:

让hatPrototype=Object.getPrototypeOf(hat)

这不是很简单吗


让hatPrototype=Object

原型只是另一个对象,用作属性和方法的后备源,javascript中的所有对象都派生自“Object.prototype”。正如您所知,“Object.getPrototypeOf”返回对象的原型,因为您没有给“hat”对象一个原型,默认情况下它的原型将从“Object.prototype”派生,如果您想给“hat”对象一个原型,您可以像这样使用“Object.create”

let hatPrototype = {
  getprice: function getPriceIncTax() {
        return Number(this.price) * 1.2;
    }
}

let hat = Object.create(hatPrototype);
hat.price = 100;
hat.name = "hat";

console.log(hat.getprice()); // returns 120
console.log(Object.getPrototypeOf(hat) == hatPrototype); // returns true
console.log(Object.getPrototypeOf(hatPrototype) == Object.prototype); // returns true

是的,
getPrototypeOf
没有那么多用例。通常,您不关心某个对象的原型链,如果您关心,您通常正在调试,然后可以在调试器中找到这些信息

><代码>对象。原型< /COD> -但是您可以使用<代码>对象.GETPrimeType O/C>在您还不知道原型的东西上,如<代码> +/>代码>是一个有用的运算符,即使<代码> 2 + 2 可以像<代码> 4 >代码>一样简单。请考虑<代码>对象.GETType(文档).GETelEnMyByID(“HONID”);code>@Barmar的
hat
对象继承自
object
object.prototype
?@secondimage您可以通过运行
object.getPrototypeOf(hat)=object
object.getPrototypeOf(hat)找到==Object.prototype
对象继承自
对象或
对象。prototype
?@secondimage它继承自
hatPrototype
,后者继承自
对象
“javascript中的所有对象都源于“Object.prototype”-不完全是,不是。
let hatPrototype = {
  getprice: function getPriceIncTax() {
        return Number(this.price) * 1.2;
    }
}

let hat = Object.create(hatPrototype);
hat.price = 100;
hat.name = "hat";

console.log(hat.getprice()); // returns 120
console.log(Object.getPrototypeOf(hat) == hatPrototype); // returns true
console.log(Object.getPrototypeOf(hatPrototype) == Object.prototype); // returns true