您的位置:首页 > Web前端 > JavaScript

js- 对象

2016-06-28 20:14 405 查看
原始值 VS 对象

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

  一.primitve

   1、字符串

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

    3、布尔值

   4、null

    5、undefined

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

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

    



   2、[b]日期
[/b]

   3、[b]创建的对象[/b]

     (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,里面的 prototype: Person

外围prototype类型仍旧是Object。

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

     


     如果用create去创建对象,创建的方法或属性,都属于原型链,并不是这个对象的属性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: