对原型对象和Object.getPrototypeOf()感到困惑

时间:2019-09-06 02:08:14

标签: javascript

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

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

enter image description here

let hat = {
    name: "Hat",
    price: 100,
    getPriceIncTax() {
        return Number(this.price) * 1.2;
    }
};

let hatPrototype = Object.getPrototypeOf(hat);

我很困惑,因为Objecthat的原型,所以当我们尝试获得hat的原型时,不是原型就是{{ 1}}本身?为什么我们仍然需要像这样:

Object

不是那么简单:

let hatPrototype = Object.getPrototypeOf(hat);

2 个答案:

答案 0 :(得分:0)

原型只是用作属性和方法的备用源的另一个对象,而javascript中的所有对象均源自“ Object.prototype”。如您所知,“ Object.getPrototypeOf”会返回对象的原型,因为您没有为“ 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

答案 1 :(得分:0)

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