原型

作者: BIGHAI | 来源:发表于2017-05-28 15:32 被阅读0次

如果你尝试向数组添加一个属性,而且这个属性名“看起来”像是一个数字的话,那么这个新添加的属性将会被作为数组的一个元素项。随之带来的问题是不经意的扩展了数组一项或者若干项。所以说,我们在为数组动态添加属性的时候,应该避免属性名是字符串数字。

JavaScript中的对象有一个特殊的[[Prototype]]内置属性,它其实就是一个对于其他对象的引用。几乎所有的对象在创建时[[Prototype]]属性都会被赋予一个非空的值。不过,[[Prototype]]属性的值可以为空。关键词:所有的对象都具有一个内置的[[Prototype]]属性,并非函数特有。

1.[[Prototype]]属性的作用之——使得[[Get]]查询可以顺藤摸瓜

当我们试图引用对象的属性时会触发[[Get]]操作,对于默认的[[Get]]操作来说,第一步是检查对象本身是否有这个属性,如果有的话那就使用它;但是如果对象里没有这个属性的话,那么会检查对象的[[Prototype]]属性所指向的那个对象有没有这个属性,同理类推接着进行下次寻找。这个过程会持续到找到匹配的属性名或者查找完整的一条[[Prototype]]链。如果是后者的话,那么[[Get]]操作返回的是undefined。举个例子:

var anotherObject = {"a": 2}
var myObject = Object.create(anotherObject)
console.log(myObject)//Object{}
myObject.a//2

我们利用了Object.create()方法将myObject对象的[[Prototype]]关联到了anotherObject,所以说尽管myObject上没有a属性,但是myObject的原型链上有,所以可以顺利的访问到a属性。

使用for...in...遍历对象的时候,也会将该对象原型链上的属性返回:

var obj1 = {"proto1": 1, "proto2": 2}
var obj2 = Object.create(obj1)
obj2.a = "A"
obj2.b = "B"
for(var key in obj2){
  console.log(obj2[key])//A B 1 2
}

2.Object.prototype

某个对象的[[Prototype]]的尽头在哪里?一般来说,所有普通的[[Prototype]]链最终都是指向内置的Object.prototype。所以,在JavaScript中,“普通的”对象都源于这个Object.prototype对象,所以语言规范在Object.prototype中实现了许多通用的功能。

END

相关文章

  • JavaScript 原型、原型链与原型继承

    原型,原型链与原型继承 用自己的方式理解原型,原型链和原型继承 javascript——原型与原型链 JavaSc...

  • JavaScript 原型和原型链

    原型 在 JavaScript 中,我们所称的原型有两个使用语境: 原型关系 原型属性 原型关系指对象的原型对象,...

  • JavaScript 原型和原型链

    原型 在 JavaScript 中,我们所称的原型有两个使用语境: 原型关系 原型属性 原型关系指对象的原型对象,...

  • 原型、原型链

    (什么是原型、原型链?有什么作用) JavaScirpt深入之从原型到原型链 图解 Javascript 原型链 ...

  • 关于原型原型链的理解

    什么是原型? 什么是原型链? 为什么需要原型,和原型链?

  • js的原型对象&原型链&js的继承

    原型对象 & 原型链 原型对象分2种:显式原型和隐式原型。 显式原型就是我们常用的prototype属性,是函数的...

  • 4.4 JavaScript

    4.4.1. 原型链 4.4.1.1. 显式原型和隐式原型   JavaScript的原型分为显式原型(expli...

  • 原型、原型链

    理解JavaScript原型 彻底理解JavaScript原型 原型 原型是一个对象,所有对象都可以成为原型,其...

  • 廖雪峰JS小记

    (function(){})() 原型,原型链 浅谈Js原型的理解JS 原型与原型链终极详解 对象 对象:一种无序...

  • 2-6 原型和原型链 - 5个原型规则

    2-6 原型和原型链 - 5个原型规则 5条原型规则,原型规则是学习原型链的基础。 第一、所有引用类型(数组、函数...

网友评论

      本文标题:原型

      本文链接:https://www.haomeiwen.com/subject/tdzcfxtx.html