zoukankan      html  css  js  c++  java
  • 基本类型和引用类型调用是的区别(Object.create)


    var
    person = { name : 'jim', address:{ province:'浙', city:'A' } } var newPerson = Object.create(person);
    console.log(newPerson.name)//jim newPerson.name
    ='jack'; newPerson.address.province = '沪'; console.log(person.name, person.address.province) //jim,沪
    
    

    缘起上面一段代码,结果出来感觉疑惑了。

    原因是Object.create出来的newPerson其实是一个空对象,原型是person。

    newPerson.name赋值或者读值的时候会首先去person中去找,如果有name属性。则返回原型person.name

    如果没有则重新赋值。

    按照这个思路解释的时候,看官就感觉奇怪了,那newPerson.address.province这个值赋值的的时候也是newPerson的不是person的啊。

    这个就涉及到基本类型和引用类型的区别了。

    基本类型(Undefined、null、Boolean、Number、String)在内存中占据固定的内存大小,因此被保存在栈内存中,从一个变量像另一个变量复制基本类型的的值,会创建这个值的副本。newPerson.name是person.name的个副本。

    引用类型(Object、Array、Date、RegExp、Function)的值是对象,保存在堆内存中,包含引用类型的值的变量实际上包含的并不是对象本身,而是一个指向该对象的指针。

    一个变量向另一个变量复制引用类型的值,其实复制的是指针,因此两个变量指向同一个对象。因此在create一个 还是指向person的对象。

    
    
  • 相关阅读:
    Elastic-Job
    Redis之Ubuntu下Redis集群搭建
    设计模式之单例模式
    设计模式之简单工厂模式
    Java集合(一)HashMap
    数据结构和算法(四)归并排序
    数据结构和算法(三)希尔排序
    数据结构和算法(二)插入排序
    博客转移通知
    C语言回调函数总结
  • 原文地址:https://www.cnblogs.com/jinbiao/p/3646349.html
Copyright © 2011-2022 走看看