zoukankan      html  css  js  c++  java
  • js之重写原型对象

    “实例中的指针仅指向原型,而不是指向构造函数”。

    “重写原型对象切断了现有原型与任何之前已经存在的对象实例之间的关系;它们引用的仍然是最初的原型”。——前记 

    var fun = function(){}
    fun.prototype = {    
        name : 'peter',    
        age : 25    
    }
    var a = new fun();
    var b = new fun();
    console.log(a.name, b.name);//peter peter
    fun.prototype.name = 'jack';
    console.log(a.name, b.name);//jack jack
    fun.prototype = {};
    fun.prototype.name = 'tom';
    console.log(a.name, b.name); //jack jack
    console.log('1',b.constructor === fun)  //1 false
    console.log('2',b instanceof fun)  //2 false
    b.constructor.prototype.name = 'kitty'; //b.constructor.prototype指向的是fun的prototype
    console.log(a.name, b.name); //jack jack
    
    //如何修改a和b的name是tom?
    a.__proto__.name = 'tom';
    console.log(a.name,b.name)

      

    上面的b.constructor指向的是构造函数,但是如果构造函数原型被重写,b.constructor !== fun了,原因是指针指向的其实是原型对象。所以:实例化对象的constructor对象不是任何时候都指向构造函数本身,除非构造函数的原型一直不变,如果构造函数原型重写,全等关系就破灭了。

    可以看出,实例在原型修改前后的不同,实例只继承实例化之前的原型,可以修改属性值,但是如果重写,那么实例化对象的指针__proto__指向的还是以前的原型对象,如果想要重写实例的原型,则需要修改实例化对象的__proto__属性值了。

    【完】

    The normal,they make me feel afraid

    The crazy, they make me feel sane

  • 相关阅读:
    flash player over linux
    chmod 命令
    A*算法
    adb找不到设备
    ubuntu14.04安装wine以及国际版QQ
    linux man
    X-window
    linux file system
    linux command
    directUI
  • 原文地址:https://www.cnblogs.com/tangjiao/p/9910185.html
Copyright © 2011-2022 走看看