【js学习笔记-028】-- 对象的创建

来源:互联网 发布:网络兼职信息网 编辑:程序博客网 时间:2024/05/10 02:06

可以通过直接量,关键字new和ECMAScript 5 Object.create()函数来创建对象。

对象直接量:若干名值对组成的映射表,名值对中间用冒号分开,名值对之间用逗号分隔。整个映射表用括号括起来。

通过new创建对象:关键字new后跟随一个函数调用。这里的函数称为构造函数,构造函数用以初始化一个新创建的对象。Js语言核心中的原始类型包含内置构造函数。如

var o = new Object(); //创建一个空对象和{}一样

var a = new Array();

var d = new Date();

var r = new RegExp(“js”);

原型:每一个js对象(null除外)都和另一个对象相关联。“另一个”对象就是我们熟知的原型,每个对象都从原型继承属性

ECMAScript5  Object.create():需要两个参数,第一个是这个对象的原型,第二个(可选)用以对对象的属性进一步描述。可通过传入null来创建一个没有原型的新新对象。这种方法创建的对象不会继承任何东西,甚至不包括基础方法,如toString()。也就是说,它将不能和”+”运算符一起正常工作。如果需要创建一个普通对象,需要要传入Object.prototype

var o3 = Object.create(Object.prototype) ; // o3和{},new Object()一样。

 

如下:

   function   inherit(p){

     if(p==null) throw TypeError();

     if(Object.create) return Object.create(p);

     var t = typeof p

     if(t!=”object” && t!=”function”) throw TypeError();

     function f(){};  //定义一个空构造函数

     f.prototype = p;

     return  new f();

}

 

目前只需要理解,返回的对象继承了参数对象的属性。它不能等同于Object.create(),因为它传入null无效。上面的函数还有一个功能就是防止库函数无意间修改那些不受你控制的对象

这的原理就是不是将对象直接作为参数传入函数,而是将它的继承对象传入函数。当然函数读取继承对象属性时,实际上是读取的是继承来的值。如果给继承对象的属性赋值,则这些属性只会影响这个继承对象自身,而不是原始对象

   var  o = {x:”don’t change this value”};

  library_function(inherit(o)); //防止对o的意外修改