码迷,mamicode.com
首页 > 编程语言 > 详细

《Javastcript权威指南》对象

时间:2015-03-21 15:24:29      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:

内置对象:ECMAScript定义的对象或类,如数组、函数、正则表达式和日期。

宿主对象:由javascript解析器嵌入的宿主环境(Web浏览器)定义的。客户端javascript中表示网页结构的HTMLElement对象均是宿主对象。

自定义对象:运行中的javascript代码创建的对象

 

一、创建对象

1.对象直接量

var book {

    "main title": "javascript",             //属性名里有空格

    "sub-title": "The Definitive Guide",    //属性名利有连字符

    "for": "all",                           //属性名是保留字

    author: {

        firstname: "David",

        lastname: "Flanagan"

    }

}

对象直接量的每次运算都创建并初始化一个新的对象。

 

2.通过new创建

new后跟随构造函数

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

var a = new Array();             //创建空数组,和[]一样

var d = new Date();              //创建表示当前时间的Date对象

var r = new RegExp(‘js‘);        //创建可以进行模式匹配的RegExp对象

 

3.原型

通过对象直接量创建的对象都具有同一个原型对象 通过new和构造函数创建的对象的原型就是构造函数prototype属性的值 Object.prototype 是没有原型的对象

 

4.Object.create()

创建一个新对象,第一个参数(必选)是它的原型,第二个参数(可选)描述它的属性

如果第一个参数传入null,则会创建没有原型的对象,不继承任何东西

如果要创建普通的空对象,需要传入 Object.prototype

 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();

 }

 

二、属性的查询和设置

可以用 . 和 []  获取属性值

. 的右侧必须是以属性名称命名的简单字符串

[] 内必须是计算结果为字符串的表达式

通过 . 访问属性名时,属性名用标识符表示,无法动态指定;

通过 [] 访问属性时,属性名通过字符串表示,可以修改和创建。

 

 2.继承

 只有查询属性时才体会到继承,设置属性和继承无关。

 

 3.删除

 delete 不能删除可配置性为false的变量,如通过变量声明和函数声明创建的全局对象的属性

 

 4.检测

 in:如果对象的自有属性或继承属性包含这个属性则返回true

 hasOwnProperty():检测给定的名字是否是对象的属性,对于继承属性返回false

 propertyISEnumerable():检测到是自有属性且是可枚举性为true才返回true

!== 可以判断属性是否为undefined in 能区分不存在的属性和值为undefined的属性

var a = {x: undefined};

a.x !== undefined;  //false 属性存在,但值为undefined

a.y !== undefined;  //false

a.x in undefined;   //true 属性存在

a.y in undefined;   //false

 

5.枚举

for in 循环可以遍历对象的所有可枚举属性(包括自有属性和继承属性),把属性名复制给循环变量 Object.keys() 返回一个数组,由对象的可枚举的自由属性的名称组成

getOwnPropertyNames() 返回对象的所有自有属性名称

 

6.getter setter

EMCAScript5属性值可以用getter和setter方法代替。由getter和setter定义的属性称作“存取器属性”

存取器属性定义为一个或两个和属性同名的函数,这个函数定义没有使用function关键字,而是get、set。

    var o = {

        data_prop: value,

        get accessor_prop() {},

        set accessor_prop(value) {},

    };

 

7.特性

值:value 可写性:writable 可枚举性:enumerable 可配置性:configurable

 

8.原型、类、可扩展性

原型

对象直接量创建的对象使用Object.prototype作为原型

new创建的对象使用构造函数的prototype属性作为原型

Object.create()创建的对象使用第一个参数作为原型

ECMAScirpt5通过 Object.getPrototypeOf()查询对象的原型,ECMASript3使用表达式o.constructor.prototype p.isPropertyOf(o) 检测p是否是o的原型

可扩展性

ECMAScirpt5,通过将对象传入Object.exExtensible()判断对象是否可扩展,将对象变为不可扩展后无法转换回可扩展。

 

Object.preventExtensions()将对象转换为不可扩展

Object.seal()除了能将对象设置为不可扩展,还可以将对象的所有自有属性设置为不可配置。

Object.freeze()除了将对象设置为不可扩展和属性设置为不可配置,还将它自有的数据设置为只读 都返回传入的对象

 

9.序列号对象

对象序列号:将对象的状态转换为字符串,也可以将字符串还原为对象。

ECMAScript提供JSON.stringify()和JSON.parse()来序列号和还原

 

10.对象方法

toString()

返回表示调用这个方法的对象只的字符串,在需要将对象转换为字符串时都会调用

 

toLocaleString()

返回表示这个对象的本地化字符串

 

toJSON()

 

valueOf()

需要将对象转换为某种原始值才会调用,尤其是转换为数字

 

工具函数

/*将p的可枚举属性复制到o并返回o

 *o中的同名属性被覆盖

 */ 

function entend(o, p) {

    for (prop in p) {

        o[prop] = p[prop];

    }

    return o;

}


/*将p的可枚举属性复制到o并返回o

 *o中的同名属性不受影响

 */

function merge(o, p) {

    for (prop in p) {

        if (o.hasOwnProperty[prop]) continue;

        o[prop] = p[prop];

    }

    return o;

}


/*

 *如果o中的属性在p中没有同名属性,则从o删除该属性

 */

function restrict(o,p) {

    for (prop in o) {

         if (!p.hasOwnProperty[prop]) delete o[prop];

    }

    return o;

}


/*

 *如果o中的属性在p中存在,则从o删除该属性

 */

function subtract(o, p) {

    for (prop in p) {

        delete o[prop];

    }

    return o;

}


/*

 *返回一个新对象,同时有o和p的属性

 */

function union(o, p) {

    return extend(extent({}, o), p); 

}

 

《Javastcript权威指南》对象

标签:

原文地址:http://www.cnblogs.com/surahe/p/4355536.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!