【js学习笔记-028】-- 对象的创建
2013-07-23 16:16
148 查看
可以通过直接量,关键字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的意外修改
对象直接量:若干名值对组成的映射表,名值对中间用冒号分开,名值对之间用逗号分隔。整个映射表用括号括起来。
通过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的意外修改
相关文章推荐
- 韩顺平_轻松搞定网页设计(html+css+javascript)_第30讲_类和对象细节_创建对象的几种方式_js对象内存分析_学习笔记_源代码图解_PPT文档整理
- js学习笔记:对象——创建对象
- JS学习笔记01-创建对象
- JS学习笔记-OO疑问之对象创建
- 我的js学习笔记之创建对象
- JS 学习笔记 (2) 创建 对象
- JS学习笔记-OO创建怀疑的对象
- 【学习笔记六】 - js中 创建对象的模式与继承 及 js中实现块级作用域和函数私有变量 《js高程》6-7笔记
- 韩顺平 javascript教学视频_学习笔记13_类和对象细节_创建对象的几种方式_js对象内存分析
- 反射学习笔记之动态创建对象和调用方法
- 面向对象的程序设计1 理解对象—— JS学习笔记2015-7-4(第75天)
- 【JAVA学习】EffectiveJava的学习笔记--第一章 创建和销毁对象
- ajax学习笔记:原生态js创建
- 微软企业库4.1学习笔记(八)创建对象 续集2
- js内置对象 学习笔记
- Java学习笔记6. 对象的创建、声明与使用
- ADO.NET学习笔记——如何手动创建类型化DataSet对象
- JavaScript学习笔记之JS对象
- MATLAB学习笔记(二):符号计算(创建符号对象)
- JS 学习笔记--11---内置对象(Global/Math)