JavaScript数据属性特性与原型链枚举机制详解
作者:函数茶馆时间:2026-10-29 21:37:31浏览:102
本文详细解析JavaScript中数据属性的四个描述符特性:writable、enumerable、configurable和value。通过对比for...in循环、Object.keys与hasOwnProperty的行为,阐明自有属性与原型链继承属性在枚举时的区别,帮助开发者准确掌握属性定义与遍历机制。
数据属性及其描述符特性
数据属性
数据属性是指包含具体数据值的位置,该位置支持读取和写入操作。
数据属性具备四个描述其行为特性的元数据:
writable:决定属性的值是否可被修改,默认值为true。
Enumerable:决定属性是否可通过for...in循环枚举返回,即是否可被遍历。
configurable:决定属性是否能被delete删除从而重新定义,或能否修改其配置信息。
value:包含该属性的实际数据值。读取属性时从该位置获取值。
写入属性值时,新值将保存至该位置,默认值为undefined。
<script>
function Foo(){}
Foo.prototype.z =
var obj = new Foo()
obj.x =
alert("x" in obj) //=>true x是obj对象的自有属性
alert("z" in obj) //=>true z是obj原型上继承来看属性
//hasOwnProperty 必须是对象上的自有的属性才返回true
alert(obj.hasOwnProperty("x")) //true x是obj对象上的自有属性
alert(obj.hasOwnProperty("z")) //false z是obj原型上继承来的属性,不是他的私有属性
alert(Foo.prototype.hasOwnProperty("z")) //=>true z是原型上自有的属性,所以返回true
alert(Object.prototype.hasOwnProperty("toString"))//=>toString 是顶级对象上的自有属性,所以返回true
//prpertyisEnumeralbe 的意思是必是对象上的自有属性而且要以是枚举的,但是对象的可枚举属性Enumeralbe是true,才能返回true
alert(obj.propertyIsEnumerable("x")) //true x是obj对象上可枚举的属性
alert(obj.propertyIsEnumerable("z")) //false z是obj原型上的属性,不是自有属性,则不可以枚举
alert(Foo.prototype.propertyIsEnumerable("z")) //true x是原型上的自有属性,所以可以枚举
</script>
属性枚举与原型链行为差异
如何枚举属性,以及枚举操作在原型链上有哪些区别?
演示代码如下:
<script>
function Foo(){}
Foo.prototype.age =
var obj = new Foo()
obj.name = "ziksang"
obj.addr = "上海"
obj.telephone =
for(var p in obj){ //使用FOR IN 可以枚举出自身的属性和原型上的属性
console.log(p)
}
console.log(Object.keys(obj)) //使用Object.keys(obj)只可以枚举Obj对象上自身的属性
console.log(Object.getOwnPropertyNames(obj)) //Object.getOwnPropertyNames(obj)是列出Ojb对象上自身的属性名,与枚举不相关,但是又类似枚举,大家要注意区分
</script>
以上内容是小编给大家介绍的JavaScript中关联原型链属性特性的相关知识,希望对大家有所帮助。
作者最新文章
JS split切割后出现空字符串怎么过滤
2026-11-05 16:00:30
在 React 或 Vue 项目中封装使用 JS 节流防抖
2026-11-05 15:27:29
JavaScript中怎么将带小数的字符串转为整数?
2026-11-05 14:32:38
怎么用JavaScript策略模式重构电商促销计算逻辑?
2026-11-05 14:01:09
JS使用constructor判断数据类型可靠吗
2026-11-05 13:49:41
