javascript - Javascript中的原型概念,我说对了吗?
问题描述
function Person(name, age, gender) {
(this.name = name), (this.age = age), (this.gender = gender);
}
Person.prototype.eyecolor ="black";
var myFather = new Person("Singh", "50", "Male");
console.log(myFather.eyecolor);
console.log(myFather);
console.log(Person);
myFather 继承自 Person.prototype ,使用
__proto__
它将 myFather 链接到Person.prototype
( myFather.__proto__ === Person.prototype
) 并且此 Person 构造函数继承自Function.prototype
并且此 Function 继承自Object.prototype
,这就是为什么说 javascript 中的所有内容本质上都是一个对象。
我对这件事的理解正确吗?我在 Prototypes in JS 中评论了我在这里所理解的内容。在这个时间点,我不知道这个概念的实际用途。也许当我了解更多时,我可能会看到它的一些用途。
解决方案
是的,您已经正确理解了这一点。这个概念在Javascript中被称为原型链。
JavaScript 对象有一个指向原型对象的链接。当尝试访问对象的属性时,不仅会在对象上查找该属性,还会在对象的原型、原型的原型等上查找该属性,直到找到具有匹配名称的属性或结束原型链到达。
基本上,这将一直追溯到对象 object,所有Javascript类型都从该对象继承,其__proto__
为 null。
请注意,存在两个属性,它们基本相同:__proto__
和prototype
. 区别在于只有函数具有prototype
属性,而所有对象都具有__proto__
属性。该__proto__
属性是非标准的,但大多数浏览器都实现了它,因此可以保存使用。
推荐阅读
- asp.net-mvc - 某些机器上的 ADFS 身份验证循环
- .htaccess - https 上的非 www 到 www
- regex - 如何将 RegEx 与 React Router 一起使用?
- .net - 如何为 WebOperationContext.OutgoingWebResponseContext 设置正文
- python - 使用 docker python "no space left on device" 后无法正确重启 ubuntu,外围设备上没有可用内存
- backbone.js - 如何检查backbone.radio中是否存在处理程序?
- java - 如何使 JTabbedPane 中的选项卡可重新排列?
- webpack - 忽略全局变量 webpack4/babel7
- hive - Hive 用 force 命令截断外部表不起作用
- c# - 如何让 XunitExceptions 更有意义?