zoukankan      html  css  js  c++  java
  • js- 对象

    原始值  VS 对象

      javaScript中的值可以被划分为两个大类:原始值(primitive) and 对象(object);

      一.primitve 

          1、字符串

        2、数字: 在js的世界里,所有数字都是浮点数,是双精度的

        3、布尔值

          4、null

        5、undefined

         二.所有其他的值都是对象

         1、primitve 的包装对象:Boolean、Number、String

        

       2、日期

       3、创建的对象

          (1)对象是可变的。

            Js的对象是可以动态添加属性的。

          (2)每个对象都有自己唯一的标识符。

            通过字面量或者构造函数创建的对象和其他任何对象都不相等。

            []===[] ---false  

            对象是通过引用来比较的。只有两个对象有相同的标识,才认为对象是相等的。 

         (3)变量保存了对象的引用。

    typeof VS instanceof

      typeof 可以用来区分原始值与对象,instanceof可以用来区分对象对象。

      typeof null  ---- Object

      但是, null !=Object

    对象的创建

      如何理解 var p1=new Person() 这句代码呢?

     可以分解成三步操作。
    var p1={}; //创建一个新对象
    p1.__proto__=Person.prototype; //将构造函数的作用域赋给新对象,
    Person.call(p1); //执行构造函数中的代码 返回新对象
      这里会改变对象的__proto__属性,属性类型会由Object变成Person,,并且将Person的属性值全部指向p1. 
    
    

    对象的修改 

     var Person=function() { };
    
      //每个函数都有一个 prototype属性,这个属性指向函数的原型对象
    //原型对象会自动获取一个constructor(构造函数)属性,这个属性指向
    prototype属性所在的函数 的指针(估计是一种引用)
     //调用构造函数创建一个实例后,实例内部 包含一个指针([[Prototype]]))
     //Chrome 在每个对象上都支持一个属性 __proto__,
    未经任何修改时一个对象 __proto__,类型是Object。
    //__proto__指向 构造函数的原型对象

     var Programmer = function () { };
    Programmer.prototype=new Person();
    
      var Programmer1 = function () { };
      Programmer1.prototype=Person.prototype; //问题来了,这两者的区别是什么呢 
      
    1、Programmer.prototype=new Person();
    此时,Programmer已经不存在constructor(),prototype已经改变,类型已经是Person,
     里面有constructor();



    2、Programmer1.prototype=Person.prototype;
    此时,依旧含有constructor(),但constructorl类型已变成Person,里面的
    prototypePerson
      外围prototype类型仍旧是Object。

    并非所有的对象上都有原型

         

         如果用create去创建对象,创建的方法或属性,都属于原型链,并不是这个对象的属性。

  • 相关阅读:
    奇葩的Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
    dubbo的本地存根
    已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数。
    数字字符串转换成与其面值相同的长整形整数
    PHP实现MySQL的主键id自动重新自增排序
    四叶玫瑰数
    PHP动态实现从数据库中访问链接到标签a的herf中
    Proteus8.0的main.asm源代码使用
    Office 2010 安装和激活出错解决办法
    PHP实现文件读写中英文数据分割插入数组代码
  • 原文地址:https://www.cnblogs.com/xianrongbin/p/4665810.html
Copyright © 2011-2022 走看看