js笔记(对象)

创建对象:3种(对象直接量、new、原型)
var o = {} <-> var o = new Object() <-> var o = Object.create(Object.prototype)

关联数组的对象
object.property
object["property"]
以上两种访问方式是一样的,但通常情况使用后者,因为前者通过 . 操作符来进行访问 ,而这样的property是需要写死的,后者不同,它类似于hashmap,通过key/value 进行访问,这个也是类似数组,但跟数组不同,索引不是数字而是字符串。使用后者,可以进行动态操作,例如:
var addr = "";
for(var i = 0 ; i < 4 ;i++)
{
    addr += customer["No"+i] ;
}
这段代码可以动态的读取customer0、customer1、customer2、customer3属性,并将其连接起来。
如果使用点操作符,是做不到的。

在js面向对象的继承中,核心就是原型对象继承,连接起来就是原型链(propoty chain)。
当函数读取继承对象的属性时,实际上读取的是继承来的值。如果给继承对象的属性赋值,则这些属性只会影响继承对象本身,而不会影响原型对象。
下面代码可以很好的理解以上两句话。
var o = {}
o.x =1;                                  //没有这属性,会自动为此对象添加属性并赋值
var p = Object.create(o);      //这是继承o对象
p.y = 2;
alert("o.x:"+o.x +" p.x:"+p.x);//提示:o.x:1 p.x:1
//一下修改一下 p.x
p.x = 3;
alert("o.x:"+o.x +" p.x:"+p.x);     //提示:o.x:1 p.x:3
//以下修改一下o.x
o.x = 10;
alert("o.x:"+o.x +" p.x:"+p.x);     //提示:o.x:10 p.x:10

留意以上提示的结果,
第一次的显示,p对象会继承o对象的属性,那就是说两者的x是一样的。
第二次的提示,修改了p.x属性,结果p对象x属性改变了,而o对象x属性值没有改变,那就是说 修改继承对象的属性值只会改变继承对象的属性值,而不会影响其原型对象的属性值。
第三次的提示,修改了o.x属性,结果o、p两个对象的x属性一起改变了,那说明 p.x属性值是读取于o.x,即继承对象属性是读取原型对象属性(假设原型对象属性与继承对象属性的名称一样),修改了原型对象的属性,会使其继承对象的继承属性跟着改变。
其实 ,上面的操作是设置属性。在js中 只有在查询属性的时候才会体现到继承的存在,而设置属性则和继承无关。

删除对象属性(准确的说,应该是 断开对象属性连接)
删除对象属性只能删除对象本身的属性,而不能删除原型对象属性
语法:delete object.property  或者 delete object[property]
一般情况下,执行delete语句后会返回true,不管执行是否成功。
例如 var o = {x:1}; delete o.x;//将返回true
         delete o.y;//o对象中没有y属性,此时js不会报错,它检测出没有这个属性就什么都不做,并且返回true;
假设现在多了一个继承对象
       var p = Object.create(o);//返回继承了o对象的新对象;
        p.y = 3;
       delete p.x ;//没有任何操作 ,因为对象只能删除自身对象的属性   ,返回true

在非严格模式下,下列情况会返回false:("user strict"表明严格模式)
       delete Object.prototype//属性不可配置,不可删除,并返回false
       var x = 1;
       delete this.x //注意x是全局变量,不能删除全局变量,并返回false;同时 也不能删除全局函数

注意下面例子与上面删除全局变量的例子的区别:
      this.x = 1;//创建一个可配置的全局属性(注意是全局属性),没有var声明(不是全局变量)
      delete x;//此时 删除是可以成功的,并返回true。注意这是在非严格模式下的。如果严格模式下,它会出错,所以要用下面行代码,比较安全
     delete this.x;//不管哪种模式,其删除也能成功。

检测属性:
三种:in , hasOwnProperty , PropertyIsEnumerable
三种用法范围不同。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值