gpt4 book ai didi

javascript - 在 Javascript 中使用原型(prototype)继承

转载 作者:行者123 更新时间:2023-12-03 05:24:06 25 4
gpt4 key购买 nike

我从在线资源中修改了一些代码,讨论了原型(prototype)继承。

var myObj = function() {}; // start w a regular func

myObj.prototype.a = 1; // attach properties to property
myObj.prototype.b = 2;

console.log('myObj dir a is: ' + myObj.a); // undefined

var myRealObj = new myObj();
console.log('my real obj a is: ' + myRealObj.a); // works

我有点困惑的是第一个日志语句,其中 a 未定义。即使它位于函数上方的原型(prototype)链中,它不应该遍历该链吗?为什么当我使用 new 创建对象时它会起作用?

谢谢!

最佳答案

您的困惑源于“构造函数”与使用new关键字时从该函数(实例)创建的对象之间的区别.

在第一次尝试写入控制台时,您实际上并未调用构造函数:

// The "a" property won't exist because "myObj" isn't being invoked
console.log('myObj dir a is: ' + myObj.a);

函数必须用括号调用,构造函数也必须用 new 调用,才能获得从它们创建的 new 对象。

因此,在第一次尝试中,您尚未收到对象实例,因此您得到未定义。但是,此时 prototype 对象确实存在,因此如果您编写:

console.log('myObj dir a is: ' + myObj.prototype.a);

您将获得属性(property)值(value)。

在第二次尝试中,您确实使用了构造函数来创建对象实例。该新实例继承自其指定的原型(prototype),因此它获得原型(prototype)的 ab 属性。

该调用隐式返回对已创建的新实例的引用,并且您正在使用 myRealObj 变量捕获该引用。

关于javascript - 在 Javascript 中使用原型(prototype)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41229038/

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