JavaScript对象属性读写机制详解

作者:拾光时间:2026-10-28 19:02:28浏览:346

本文详解JavaScript中对象属性的读取与写入机制。通过点号和方括号操作符访问属性,需注意方括号内表达式需为字符串。对象支持动态添加属性。读取时遵循自身属性优先、原型链回溯规则;写入时涉及属性存在性、只读性及setter调用,最终修改始终作用于对象自身而非原型。

JavaScript对象属性的基本访问与动态添加

在JavaScript中,访问或修改对象的属性(property)主要依赖两种语法:点号操作符(.)和中括号操作符([])。


具体实现代码如下:

var o = {x:1, y:2};
console.log(o.x);//1
console.log(o["y"]);//2
o.y = 7;
console.log(o["y"]);//7

需要特别注意的是,使用中括号操作符时,括号内的值必须是字符串类型,或者是可以隐式转换为字符串的表达式。


代码示例如下:

console.log(o[y]);//ReferenceError: y is not defined
var v = "y";
console.log(o[v]);//7

与Java语言不同,JavaScript允许动态添加或删除对象属性。当对不存在的属性进行赋值时,JavaScript会自动在对象中创建该属性。


相关代码如下:

o.z = 99;
console.log(o);//Object {x=1, y=7, z=99}

 

原型链中的属性读取与写入机制

原型继承链中的属性读取规则

 

JavaScript中所有对象都关联一个原型对象(prototype),并从该原型继承属性。因此,对象的属性可分为两类:

1. 对象自身拥有的属性(Own Property)。 2. 从原型对象继承而来的属性。

读取对象属性时,系统遵循以下查找规则:

1.从对象自身的property集合(“Own Property”)中搜索需要读取的property;如果可以搜索到,则直接读取该property并返回其值。 2.如果无法从对象自身的property集合(“Own Property”)中搜索到该property,那么则从对象的prototype原型链中继续进行搜索,直至搜索到该property并返回其值。 3.如果无法从对象自身的property集合(“Own Property”)中搜索到该property,也无法从对象的所有prototype对象中搜索到该property,则返回undefined。

原型继承链中的属性写入规则

向JavaScript对象写入属性时,遵循以下逻辑:

1. 若对象自身存在该属性且可写,则直接更新该属性的值。若属性为只读,则抛出错误。 2. 若对象自身不存在该属性,且原型链中也不存在,则直接在当前对象中创建该属性。 3. 若对象自身不存在该属性,但原型链中存在且可写,JavaScript会在当前对象中创建同名属性(即覆盖原型属性)。此时,原型对象中的原始值保持不变。 4. 若对象自身不存在该属性,但原型链中存在且为只读,则写入操作会抛出错误。 5. 若对象自身不存在该属性,但原型链中存在对应的setter方法,JavaScript会调用该setter。值得注意的是,执行setter时涉及的赋值操作会作用于当前对象自身,而不会修改原型对象。这可以理解为对象继承了setter函数并执行,但赋值结果保留在对象自身上。

综上所述,只要属性赋值操作成功,最终被修改的始终是对象自身的属性,原型对象中的值不会发生任何改变。

作者最新文章