《你不知道的Javascript--上卷 学习总结》(原型)

栏目: JavaScript · 发布时间: 6年前

内容简介:1、Javascript中的对象有一个特殊的[[Prototype]]内置属性,其实就是对于其他对象的引用。几乎所有的对象在创建时[[Prototype]] 属性都会被赋予一个非空的值。2、当我们获取一个对象的值的时候,首先会执行默认的[[Get]]操作来说,如果无法在对象本身找到需要的属性,就会继续访问对象的[[Prototype]]链3、所有普通的[[Prototype]]链最终都会指向内置的Object.prototype.

1、Javascript中的对象有一个特殊的[[Prototype]]内置属性,其实就是对于其他对象的引用。几乎所有的对象在创建时[[Prototype]] 属性都会被赋予一个非空的值。

2、当我们获取一个对象的值的时候,首先会执行默认的[[Get]]操作来说,如果无法在对象本身找到需要的属性,就会继续访问对象的[[Prototype]]链

3、所有普通的[[Prototype]]链最终都会指向内置的Object.prototype.

4、如果我们想给一个对象赋值的时候,这个属性既出现在myObject中也出现在myObject的[[Prototype]]链上层,那么就会发生屏蔽。如果不存在myObject上而是存在原型链上,会出现下面这些情况。

myObject.foo = 'bar'
复制代码
  • 如果在 [[Prototype]]链上层 存在名为foo的普通 数据访问属性 并且 没有被标记为只读 ,那就会直接在myObject中添加一个名为foo的新属性,它是 屏蔽属性
  • 如第一条,如果被标记为 只读 ,则 无法修改已有属性 或者 在myObject上创建屏蔽属性
  • 如果在[[Prototype]]链上层存在foo并且它是一个setter,那就一定会调用这个setter。foo不会被添加到myObject,也不会重新定义foo这个setter。

如果希望上面二和三条也发生屏蔽,就不能使用 = 操作符来赋值,而是使用Object.defineProperty来向myObject添加foo。

function Foo(){
        
    }
    
    Foo.prototype.constructor === Foo // true
    var a = new Foo();
    a.constructor === Foo // true  实际a上并没有constructor,而是通过prototype来查找到的Foo的constructor
复制代码

Foo.prototype默认有一个公有并且不可枚举的属性.constructor,这个属性引用的是 对象关联的函数 .

两种方法把Bar.prototype关联到Foo.prototype:

Bar.prototype = Object.create(Foo.prototype)
    
    Object.setPrototypeOf(Bar.prototype,Foo.prototype)
复制代码

instanceof 操作符的左操作数是一个 普通的对象 ,右操作数是一个 函数 .判断左侧的对象是否是右侧函数的实例。

isPrototypeOf 判断左侧对象是否出现在右侧对象的[[prototype]]链中。

getPrototypeOf(a) 获取a的原型

b.isPrototypeOf(c) 
    
    Object.getPrototypeOf(a)
复制代码

Object.create的polyfill代码(这个polyfill有一个问题,就是不支持第二个参数(属性描述符))

if(!Object.create){
        Object.create = function(o) {
            function F(){}
            F.prototype = o;
            return new F();
        }
    }
    
    var myObject = Object.create(anotherObject,{
        b:{
            enumerable:false,
            writable:true,
            configurable:false,
            value:3
        }
    })
复制代码

以上所述就是小编给大家介绍的《《你不知道的Javascript--上卷 学习总结》(原型)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

谷歌的断舍离:互联网企业的破坏式创新

谷歌的断舍离:互联网企业的破坏式创新

[日]辻野晃一郎 / 樊颖 / 机械工业出版社 / 2018-1 / 45.00

本书主要分为三部分: 第一部分主要讨论了世界当下如火如荼的互联网企业进军传统产业大潮,并探讨了传统企业在互联网时代的救赎之路。 第二部分主要探讨了成功体验的反面:速度与迭代,并讨论了传统企业之所以无法实现迭代与快速发展的关键原因。介绍互联网公司如何通过组织精简流程来实现高速竞争时代的机动性。 第三部分讨论了互联网时代究竟需要什么样的人才,传统企业的员工应当怎样投身互联网企业才能避......一起来看看 《谷歌的断舍离:互联网企业的破坏式创新》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具