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

JavaScript对象

时间:2017-07-08 18:42:44      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:删除   模式   rabl   关键字   而不是   字符串   tle   author   时间   

1、创建对象

可以通过对象直接量,关键字new,object.create()三种方法来创建对象

 

对象直接量

 

var empty = {};   //没有任何属性的对象
var point = {x:0,y:0};  //两个属性
var point2 = {x:point.x,y:point.y}  //更复杂的值
var book = {
    ‘main title‘:‘javascript‘,  //属性名字里面有空格,必须用字符串表示
    sub-title‘:‘The Definitive Guide‘,  //属性名字里面有连字符,必须用字符串表示
    ‘for‘:‘all audiences‘,  //‘for‘是保留字,必须用引号
    author:{  //这个属性的值是一个对象
            firstname:‘David‘,  //注意,这里的属性名都没有引号
        surname:‘Flanagan‘
    }
}        

 

 

通过new创建对象

new运算符创建并初始化一个对象,关键字后面跟一个函数调用,这个函数称作构造函数,构造函数用于初始化一个新创建的对象

 

var o = new Object();  //创建一个空对象,和{}一样
var a = new Array();  //创建一个空数组,和[]一样
var d = new Date();  //创建一个表示当前时间的Date对象
var r = new RegExp(‘js‘);  //创建一个可以进行模式匹配的RegExp对象

 

 

原型

每个对象都会从原型对象继承属性

通过对象直接量创建的对象,会继承自原型Object.prototype

通过new Object(),继承自原型Object.prototype

通过new Date(),继承原型Date.prototype.

通过new Array(),继承原型Array.prototype.

通过new RegExp,继承原型RegExp.prototype

Date.prototype,Array.prototype,RegExp.prototype继承自原型Object.prototype

Object.prototype是唯一一个没有原型的对象

 

object.create()

object.create()创建了一个新对象,第一个参数是这个对象的原型,提供第二个可选参数,可以对对象的属性进行进一步的描述

object.create() 是一个静态函数,而不是提供给某个对象调用的方法。使用方法简单,只需传入所需的原型对象即可

 

var o1 = Object.create({x:1,y:1});  //o1继承了属性x和y
var o2 = Object.create(null);  //不继承任何属性和方法
var o3 = Object.create(Object.prototype);  //o3和{}和new Object()一样,属于一个普通的空对象

 

 

 

2、属性的查询和设置

通过 . []用来获取和设置属性,点运算符是静态的,写死的,不能改变。[]是动态的,在运行是可进行修改。

var book = {
        ‘main title‘:‘javascript‘,
        ‘sub-title‘:‘The Definitive Guide‘,
        ‘for‘:‘all audiences‘,
        author:{
            firstname:‘David‘,
            surname:‘Flanagan‘
        }
}

var author = book.author;  //得到book的‘author‘属性
var name = author.surname;  //Flanagan
var title = book[‘main title‘]; //javascript
book.edition = 6;  //给book创建了一个名为‘edition‘的属性
book[‘main title‘] = ‘ECMAScript‘;  //给‘main title‘属性赋值

 

继承

对象具体有自有属性,也有一些属性是从原型对象继承而来。

假设要查询对象o的属性x,如果o中不存在x,那么将会在o的原型对象中继续查找属性x。如果原型对象中也没有x,但这个原型对象也原型,那么继续这个原型对象的原型上继续查找,直到找到x或者查到到一个原型是null的对象为止。

只有在查找时才会体会到继续的存在,设置和赋值和继承无关

 

var o = {};  //o从Objec.prototype 继承对象的方法
o.x = 1;  //给o定义一个属性x
var p = inherit(o);  //p继承o和Objec.prototype
var p.y = 2;  //给p定义一个属性y
var q = inherit(p);  //q继承p、o、Object.prototype
q.z = 3;  //给q定义一个属性z
var s = q.toString();  //toString继承自Object.prototype
q.x+q.y  //3:x和y分别继承自o和p

 

var unitcircle = {r:1};  //一个用来继承的对象
var c = inherit(unitcircle);  //c继承属性r
c.x = 1;c.y = 1;  //c定义两个属性
c.r = 2;  //c覆盖继承来的属性
unitcircle.r;  //1:原型对象没有修改

 

 

3、删除属性

delete运算符可以删除对象属性,只能删除自有属性,不能删除继承属性

 

var book = {
        ‘main title‘:‘javascript‘,
        ‘sub-title‘:‘The Definitive Guide‘,
        ‘for‘:‘all audiences‘,
        author:{
                firstname:‘David‘,
                surname:‘Flanagan‘
        }
 }
delete book.author;  //book不再有属性author
delete book[‘main title‘]  //book不再有属性‘main title‘

 

当delete表达式删除成功或者没有任何副作用的时候,返回true

var o = {x:1};  //o有一个属性x,并继承属性toString
delete o.x;  //删除x,返回true
delete o.x;  //什么都没做(x已经不存在),返回true
delete o.toString();  //什么都没做(toString是继承来的),返回true
delete 1;  //无意义,返回true

 

 

4、属性检测

四种方法:in运算符,hasOwnPreperty(),propertyIsEnumberable(),属性查询

 

in运算符

 

var o = {x:1};
‘x‘ in o;  //true:x是o的属性
‘y‘ in o;  //false:y不是o的属性
‘toString‘ in o;  //true:o继承toString属性

 

hasOwnProperty()方法用来检测给定的名字是否是对象的自由属性。对于继承属性将返回false

var o = {x:1};
o.hasOwnProperty(‘x‘);  //true:o有一个自有属性x
o.hasOwnProperty(‘y‘);  //false:o不存在属性y
o.hasOwnProperty(‘toString‘);  //false:toSting 是继承属性

propertyIsEnumerable()是hasOwnProperty()的增强版,只有检测到是自有属性且这个属性的可枚举性为true时才返回true

var o = inherit({y:2});
o.x = 1;
o.propertyIsEnumerable(‘x‘);  //true:o有一个可枚举的只有属性x
o.propertyIsEnumerable(‘y‘);  //false:y是继承来的
o.propertyIsEnumerable(‘toString‘);  //false:不可枚举

通过‘!==‘进行判断

var o = {x:1};
o.x !== undefined;  //true:o中有属性x
o.y !== undefined;  //false:o中没有属性y
o.toString() !== undefined;  //true:o继承了toString属性

 

JavaScript对象

标签:删除   模式   rabl   关键字   而不是   字符串   tle   author   时间   

原文地址:http://www.cnblogs.com/halai/p/7137396.html

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