ES6中Class的一些个人记录

40 篇文章 2 订阅
21 篇文章 1 订阅

1.Class的内部所有定义的方法,都是不可枚举的。

const funName = 'fun';
//类Demo		
class Demo{
	constructor(arg) {
	    
	}
	say(){
		
	}
	speak(){
		
	}
	[funName](){
		
	}
}

console.log( Object.keys(Demo.prototype) )	//[]
console.log(Object.getOwnPropertyNames(Demo.prototype))//["constructor", "say", "speak", "fun"]


//构造函数F
function F(){}
F.prototype.say = function(){};
F.prototype.speak = function(){}
F.prototype[funName] = function(){}

console.log( Object.keys(F.prototype) )	//["say", "speak", "fun"]
console.log( Object.getOwnPropertyNames(Demo.prototype) )//["constructor", "say", "speak", "fun"]

其中,参考【Javascript属性枚举的5个方法比较
Object.getOwnPropertyNames()方法返回一个数组,包含所有实例属性,无论它是否可枚举(但不包括Symbol值作为名称的属性)。
Object.keys()可以取得对象上所有可枚举的实例属性,返回值是包含所有可枚举属性的字符串数组。
利用这两种方法的差异,可以检测对象的实例属性是否可枚举

2.检测对象的属性是否可枚举:

const isEnumerable = (prop, obj) => 
(Object.getOwnPropertyNames(obj).indexOf(prop)) > -1 && (Object.keys(obj).indexOf(prop) > -1);

isEnumerable是Boolean类型,返回true表示属性可枚举,false为不可枚举

isEnumerable('say', Demo.prototype) 		//false
isEnumerable('speak', Demo.prototype) 		//false
isEnumerable('constructor', Demo.prototype) 		//false

isEnumerable('say', F.prototype) 		//true
isEnumerable('speak', F.prototype) 		//true
isEnumerable('constructor', F.prototype) 		//false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值