读《你不知道的JavaScript》之对象的内容

这一节选出的内容不多,因为有大量篇幅在写例子以支持论述,我要是把那些例子都写在这里,你还不如去看原著.
另外还写了迭代器在对象操作上的应用.
但实际上开发中很少用到迭代器吧,而且列出的也不是出彩的应用方法,一些常规使用,这里就不写.

以下是我觉得不错的说法:
“在引擎内部,存储在对象容器内部的是这些属性的名称,它们就像指针(技术角度来讲叫引用)一样,指向这些值真正的存储位置.”
你肯定也遇到过对象引用导致的错误,你在后面的代码修改了对象属性值,结果前面代码呈现的属性值也变了,就是因为这个.

“从技术角度讲,函数永远不会"属于"一个对象,所以把对象内部引用的函数称为’方法’似乎有点不妥.”

如果属性访问返回的是一个函数,那它也并不是一个"方法."只是把一个对函数的引用作为了一个属性的值.

"[[Get]]“是一种操作,对象默认内置”[[Get]]“操作,首先在对象中查找该属性的值,找到返回,找不到则查找原型链.访问属性会实现”[[Get]]"操作.

"[[Put]]"操作实现时,实际行为取决于许多因素,给对象赋值实现访问时:
已有描述符: 有setter则调setter;
writable为false: 静默失败;
均不符合: 将值设置为属性值;

一个属性有getters&setter或均有时,将被定义为"访问描述符".
定义setter后,[[Put]]行为会被其覆盖.

如何区分属性的值是undefined还是该属性不存在?
不访问属性值情况下判断:
console.log("a" in objA); // true;
console.log(objA.hasOwnProperty("a")); // true
区别为in在对象内没找到时会去检查原型链.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值