JavaScript对象定义、属性访问与原型链机制详解

作者:异步漫步时间:2026-10-21 18:06:13浏览:377

本文详细解析JavaScript中对象的三种定义方式,包括直接量、new Object及Object.create。重点阐述对象属性的取值机制,解释键名toString转换规则及特殊对象键的处理。同时深入剖析原型链继承原理,说明属性查找顺序、for-in遍历行为及原型属性与实例属性的冲突解决策略。

本文总结JavaScript中对象的定义、使用以及对象和原型链操作,供读者参考。

JavaScript对象的定义方式

除5种基本类型外,JavaScript中剩余的数据类型均为对象。

(1)对象的定义方式:

直接定义:


var test={x:1,y:1}

new方式创建:


var test=new Object({x:1})

Object.create方式:


var test=Object.create({x:1})

对象属性的赋值与取值机制

(2)对象属性的赋值与取值方法

示例如下:


var test={
x:1,
y:2
}

方法一:通过test['x']获取值

方法二:通过test.x获取值

其本质是将[]内的值调用toString方法后获取。例如存在赋值语句:


test[{}]=3;

可通过test[{z:1}]获取值3,若为5种基本类型,则需通过相同值才能获取。

简言之,test内部的键会调用toString方法后进行存储。

原型链与对象继承原理

2.对象与原型链

(1)此处涉及JavaScript中的继承机制。除null外,JS中所有对象均继承自原型对象object.prototype,即JS大部分对象的原型链顶端均具有object.prototype。

JavaScript基于原型链实现继承,且对象可访问原型链上对象的属性和方法。

示例:


function test(){
 this.x=x;
 this.y=y
}
var my=new test();
test.prototype.z=3;
alert(my.z); //输出为3

test.prototype为my的直接父链原型,且my可沿原型链查找直至object.prototype,因此可实现object.prototype中的方法,例如:


my.toString();//返回[object Object]

(2)原型链对对象遍历的影响

上述定义了一个对象my,若对对象使用for-in遍历,则会出现:


function test(){
  this.x=1;
  this.y=2;
}
var my=new test();
test.prototype.z=3;
console.log(my.__proto__);//会输出test.prototype
for( p in my)
{
 console.log(my[p])//会输出1,2,3
}

最后输出my[p]的值为1,2,3,发现遍历my上的属性时,将my对象原型链上的属性也遍历出来了。

补充:这种遍历是无序的。

(3)特殊赋值情况

针对上述例子,若对my对象进行赋值:


my.z=4;
alert(my.z);//这里得到的值为4

发现若对象上的属性和对象原型上的属性冲突,优先对对象上属性进行赋值。

(4)在对象的原型链上,所有对象都继承自object.prototype,除null外,可用以下链式反应表示:

my(或其他对象)—>test.prototype–>……..–>object.prototype——>null

更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript中json操作技巧总结》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》

希望本文所述对大家JavaScript程序设计有所帮助。

作者最新文章