gpt4 book ai didi

Javascript:了解原型(prototype)链

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:05:04 24 4
gpt4 key购买 nike

我创建了一个简单的类如下:

var Class = function() {};
Class.prototype.testObj = {a:2, b:3};

现在,如果我执行 console.log(Class.testObj),我会得到 undefined。但是,如果我按如下方式创建该类的实例:

var instance = new Class();
console.log(instance.testObj)

我得到了预期的输出。

在我的理解中,所有变量都被视为对象并具有原型(prototype)属性。当在对象中找不到某个键时,遍历原型(prototype)链寻找键值对。但是对于Class,它并没有遍历原型(prototype)链。

我错过了什么? new 关键字还有什么作用可以访问属性?

最佳答案

  1. 您必须清楚Class() 是您的构造函数,而不是实例对象。所以 Class.testObject 将返回 undefined 因为 Class 没有那个 property

    <
  2. 您可以将原型(prototype) 视为对象的配方。几乎每个函数都有一个 prototype 属性,该属性在创建新实例期间使用,并且prototype 在所有对象实例之间共享

  3. 构造函数只是一个与 new 一起使用以创建对象的函数

  4. 当您执行此操作时 var instance = new Class(); 这意味着您正在创建 Class 的实例对象,因此 instance 将继承 Classprototype 属性。

  5. 测试:

    console.log(instance instanceof Class); // => true

    console.log(instance.constructor === Class); // => true

    console.log(Object.prototype.isPrototypeOf(Class)); // => true

    console.log(Class.prototype.isPrototypeOf(instance)); // => true

关于Javascript:了解原型(prototype)链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25363551/

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