JS 属性列举与原型的关係 DAY70

属性列举与原型的关係
自订原型 与 原生原型 最大的不同是在可列举(enumerable)的部分
原生原型enumberable : false;
自订原型enumberable : true;

这里举一个例子

function person(){}person.prototype.name = '小明';var alex = new person();alex.a = undefined;console.log(alex);

http://img2.58codes.com/2024/20123039fbFQs4HxE6.jpg

会发现 person 原型的 name属性颜色
与物件原型的属性颜色不一样
但它跟我们一般定义属性的颜色是一样的
那为什么都是原型属性 为什么颜色会不一样呢??
我们继续往下看

// 利用for in 来查看for(var key in alex){    console.log(key); // a name}// 会发现原型的 name 出现,但为什么原型其他属性不会被列举呢??

因为这时候的 name 的 enumerable 为true
我们利用 getOwnPropertyDescriptor 来证明

function person(){}person.prototype.name = '小明';var alex = new person();alex.a = undefined;for(var key in alex){    console.log(key); // a name}console.log(Object.getOwnPropertyDescriptor(alex,'a')); // enumerable: trueconsole.log(Object.getOwnPropertyDescriptor(alex.__proto__,'name')); // enumerable: trueconsole.log(Object.getOwnPropertyDescriptor(alex.__proto__.__proto__,'toString')); // enumerable: false

所以假如我们把 name 的 enumerable改为false

function person(){}person.prototype.name = '小明';Object.defineProperty(person.prototype,'name',{    enumerable: false,})var alex = new person();alex.a = undefined;console.log(alex);for(var key in alex){    console.log(key); // a}console.log(Object.getOwnPropertyDescriptor(alex,'a')); // enumerable: trueconsole.log(Object.getOwnPropertyDescriptor(alex.__proto__,'name')); // enumerable: falseconsole.log(Object.getOwnPropertyDescriptor(alex.__proto__.__proto__,'toString')); // enumerable: false

这样列举的东西 只有 a而已
name 无法被列举
那今天的介绍就到这里
若有任何问题 或 内容有误
都可以跟我说唷http://img2.58codes.com/2024/emoticon41.gif


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章