zoukankan      html  css  js  c++  java
  • JavaScript 通过prototype改变原型的两种方式

    // -------------------- prototype 1 --------------------
    function A(){}
    
    A.prototype.n = 1
    let b = new A()  
    
    A.prototype.n = 2
    A.prototype.m = 3
    let c = new A()
    
    console.dir(b) // {n: 2, m: 3}
    console.dir(c) // {n: 2, m: 3}
    
    // -------------------- prototype 2 --------------------
    function A(){}
    A.prototype.n = 1  
    let b = new A()  // 实例的 _proto__ 与构造函数的 prototype 指向同一个地址.
    
    A.prototype = {n:2,m:3} // 这里把构造函数的 prototype 指向了别的地址,所以实例的 __proto__ 和构造函数的 prototype 不再指向同一个地址了
    let c = new A()
    console.dir(b) // {n: 1}  而前者的A.prototype改变了地址,指向了{n:1, m:2},所以不会影响先前创建的实例b
    console.dir(c) // {n: 2, m: 3}
    
    /**
     * A.prototype.n是添加属性n的值,A.prototype={n:1,m:2}是用{n:1,m:2}对象覆盖了prototype其他的属性
     * 使用.的形式还是操作原先的内存指向, 而等号就是重新赋值了
     */
    
    
    Keep learning
  • 相关阅读:
    [转载]苹果推送通知服务
    Lovekey
    大数阶乘的位数
    大明A+B
    大数取余
    A+Bcoming
    大数取余(C++)
    验证角谷猜想
    麦森数(转)
    大数阶乘的位数(C++)
  • 原文地址:https://www.cnblogs.com/leslie1943/p/13431937.html
Copyright © 2011-2022 走看看