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

查看所有标签

猜你喜欢:

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

Java Servlet & JSP Cookbook

Java Servlet & JSP Cookbook

Bruce W. Perry / O'Reilly Media / 2003-12-1 / USD 49.99

With literally hundreds of examples and thousands of lines of code, the Java Servlet and JSP Cookbook yields tips and techniques that any Java web developer who uses JavaServer Pages or servlets will ......一起来看看 《Java Servlet & JSP Cookbook》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具