javascript中的对象详解,以及对象和原型链

  1. 除了5种基本类型外,JS中剩下的就是对象

(1)对象的定义:

直接定义:var test={x:1,y:1}

new方式创建:var test=new Object({x:1})

Object.create方式:var test=Object.create({x:1})

(2)对象上的赋值与取值

举例:

var test={
x:1,
y:2
}
方法一:可以通过test[‘x’]取值

方法二:可以通过test.x取值

本质,将[]里面的值toString之后取到,比如我们这里有赋值语句比如:

test[{}]=3;

可以通过test[{z:1}]取到值3,若为5大基本类型,则要通过相同值取。

简而言之,就是test内部的值会调用toString方法后存储。

2.对象与原型链

(1)这里涉及到了JS中的继承,JS的对象中除了null,其他都继承于原型对象object.prototype,也就是说JS的大部分对象的原型链上的顶端都具有对象object.prototype.

JS是基于原型链集成的,并且对象上可以访问到原型链上对象的属性和方法。
举例:

function test(){

   this.x=x;
   this.y=y

}

var my=new test();

test.prototype.z=3;

alert(my.z); //输出为3

test.prototype为my的直接父链原型,并且my也可以沿着原型链查找,

直到object.prototype,因此可以实现object.prototype中的方法,比如

my.toString();//返回[object Object]

(2)原型链对于对象遍历的影响

我们上述定义了一个对象my,如果对对象使用for in遍历,那么会有

  function test(){
             this.x=1;
             this.y=2;
         }
        var my=new test();
        test.prototype.z=3;
       console.log(my.__proto__);//会输出test.prototype
        for( p in my)
        {
            console.log(my[p])//会输出1,2,3
        }

我们发现最后输出了my[p]的值为1,2,3,发现遍历my上的属性时候,把my对象原型链上的属性也遍历出来了。

补充:并且这种遍历是无序的。

(3)特殊赋值

针对上述例子,如果我们对my对象进行赋值,

my.z=4;
alert(my.z);//这里得到的值为4

我们发现,如果对象上的属性和对象原型上的对象冲突,优先对于对象上

属性进行赋值。

(4)在对象的原型链上,所有对象都继承与object.prototype,除了null,我们可以用以下链式来反应:

my(或者其他对象)—>test.prototype–

……..–>object.prototype——>null

你可能感兴趣的:(Javascript)