侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

JavaScript中的属性操作

2023-12-10 星期日 / 0 评论 / 0 点赞 / 18 阅读 / 3176 字

JavaScript中的属性操作一、 原型链在js中,任何一个对象都有一个prototype属性,在js中记做:_proto_。比如,我们创建一个对象:<!-- lang: js -->var foo

JavaScript中的属性操作

一、 原型链

在js中,任何一个对象都有一个prototype属性,在js中记做:_proto_。

比如,我们创建一个对象:

<!-- lang: js -->var foo = {    x:1,    y:2}

虽然看起来我们只为foo对象创建了两个属性,实际上,它还有一个属性_proto_,如图:

即使我们不定义_proto_,在js中也会预留一个属性。

如果我们定义一个空对象,foo

<!-- lang: js -->foo = function(){}foo.prototype.z = 3;var obj = new foo();obj.x = 1;obj.y =2;//运行结果obj //结果是:foo {x: 1, y: 2, z: 3}

很显然。我们并没有给obj定义z值,但是却返回了z值,从这可以看出,obj中没有,它便会顺着原型链向上查找。

此时,我们给obj定义z值:

<!--lang:js-->obj.z =10;//运行结果obj;//返回foo {x: 1, y: 2, z: 10}

接着,删除z属性:

<!--lang:js-->delete obj.z//运行结果obj;//结果是:foo {x: 1, y: 2, z: 3}

可见,我们的删除操作也只是obj上的,并不会对其原型产生影响。

二、属性操作

属性定义:调用Object.defineProperty(object, propertyname, descriptor),三个项都是必须的。

<!-- lang: js -->Object.defineProperty(obj,'title',{    value:'helloworld',});

其中,defineProperty()中的descriptor有四个属性,分别为:

  • value //值
  • enumerable //是否允许for-in进行遍历,默认为true
  • configurable //是否允许使用delete进行操作并重新定义,默认为true
  • writable //是否允许修改,more为true

此外,我们还可以查看属性,通过:Object.getOwnPropertyDescriptor(object, propertyname),两个项都是必须。如:

<!--lang:js-->var foo = {	title:'hello'};console.log(Obejct.getOwnPropertyDescriptor(obj,'title'));//运行结果是//Object {value: "hello", writable: true, enumerable: true, configurable: true}

其次,我们也可以通过for-in来遍历输出每项属性。

<!--lang:js-->var des = Object.getOwnPropertyDescriptor(obj,'title');for(var key in des){    console.log(key+':'+des[key]);}//运行结果//value:hello//writable:true//enumerable:true//configurable:true

补充一点刚才定义属性用的是Object.defineProperty(),如果我们想一次性定义多个属性,只要修改一点就可以:

<!--lang:js-->Object.defineProperties{person,{    name:{value:'Gavin',writable:false,enumerable:false},    salaty:{value:5000,writable:true,enumerable:false},    sex:{value:'man'}}}

如果我们已经定义了这些属性,那么如何修改呢,其实也很简单,只要再次定义一下就可以了。

先记录这些,继续学习,继续补充笔记。

广告 广告

评论区