首页 > 编程语言 > 详细

javascript基础知识-对象

时间:2015-12-01 01:36:49      阅读:176      评论:0      收藏:0      [点我收藏+]

javascript创建对象有三种方法:

1)对象直接量

例:var empty = {};

    var point = {x:1,y:4};

    var book = {

       "main title":"JavaScript",

       ‘sub-title‘:"The Definitive Guide",

       "for":"audiences",

       author:{

           firstname:"David",

           surname:"Flanagan"

       }

    }

2)通过new

例:var o - new Object();

      var a = new Array();

      var d = new Date();

      var r = new RegExp("js");

3)利用ECMAScript5中的Object.create()

例:var o1 = Object.create({x:1,y:2});      //o1继承了属性x和y

      var o2 = Object.create(null);    //o2不继承任何属性和方法

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

利用上面的代码,可以实现以下继承

var o = {};
o.x = 1;
var p = inherit(o);
p.y = 2;
var q = inherit(p);
q.z = 3;
console.log(q.x + q.y);  //输出3

 

另外,假设现在给对象o的属性x赋值,如果o中已经有了属性x(不是继承来的),那么这个赋值操作值改变这个已有属性x的值,如果o中不存在x属性,那么赋值操作给o添加一个x属性。如果之前o继承自属性x,那么这个继承属性就会被新创建的同名属性覆盖了。

所以在javascript中,只有查询属性时,才会体会到继承的存在,而设置属性则与继承无关。(正是体现出了继承)

属性赋值操作首先检查原型链,一次判断是否允许赋值操作。如果o继承自一个只读属性,那么赋值操作就是不允许的。

var unitcircle = {r:1};
var c = inherit(unitcircle);
c.x = 1;c.y = 1;
c.r = 2;
console.log(unitcircle.r); //输出1
console.log(c.r);  //输出2

属性访问错误的问题

当一个对象中某个属性不存在时,访问这个属性不会报错,只会报undefined。

但是如果访问一个不存在的对象的属性,则会报一个错误 ReferenceError

一种简练的常用方法,获取subtitle的length属性或者undefined

var len = book && book.subtitle && book.subtitle.length;

 

删除属性

delete 运算符只能删除自有属性,不能删除继承属性。如果要删除继承属性,必须从定义这个属性的原型对象上删除它,这会影响到所有继承自这个原型的对象。

另外delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性。

比如

var a = {p:{x:1}};
var b = a.p;
delete a.p;
console.log(b.x);  //输出1

 

javascript基础知识-对象

原文:http://www.cnblogs.com/zjtTT/p/5008918.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!