文档章节

js动态添加、修改、删除对象的属性与方法

文文1
 文文1
发布于 2015/04/02 15:03
字数 868
阅读 253
收藏 0

如何为一个对象添加、修改或者删除属性和方法。在其他语言中,对象一旦生成,就不可更改了,要为一个对象添加修改成员必须要在对应的类中修改,并重新实例化,而且程序必须经过重新编译。JavaScript 中却非如此,它提供了灵活的机制来修改对象的行为,可以动态添加、修改、删除属性和方法。例如首先使用类Object来创建一个空对象user:

var user=new Object();


1.添加属性
这时user 对象没有任何属性和方法,显然没有任何用途。但可以为它动态的添加属性和方法,例如:
 

代码示例:

user.name=”jack”;
user.age=21;
user.sex=”male”;

 

通过上述语句,user 对象便具有了三个属性:name、age和sex。下面输出这三个语句:
 

代码示例:

alert(user.name);
alert(user.age);
alert(user.sex);

 

由代码运行效果可知,三个属性已经完全属于user 对象了。

2.添加方法
添加方法的过程和属性类似:
 

代码示例:

user.alert=function(){
alert(“my name is:”+this.name);
}

 

这就为user 对象添加了一个方法“alert”,通过执行它,可以弹出一个对话框显示自己的名字介绍:
 

代码示例:

user.alert();

3.修改属性
修改一个属性的过程就是用新的属性替换旧的属性,例如:
 

代码示例:

user.name=”tom”;
user.alert=function(){
alert(“hello,”+this.name);
}

 

这样就修改了user 对象name属性的值和alert方法,它从显示“my name is”变为了显示“hello”。

4.删除属性
删除一个属性的过程也很简单,就是将其置为undefined:
 

代码示例:

user.name=undefined;
user.alert=undefined;

 

这样就删除了name属性和alert方法。在之后的代码中,这些属性变的不可用。
在添加、修改或者删除属性时,和引用属性相同,也可以采用方括号([])语法:
 

代码示例:

user[“name”]=”tom”;


 

使用这种方式还有一个额外的特点,就是可以使用非标识符字符串作为属性名称,例如
标识符中不允许以数字开头或者出现空格,但在方括号([])语法中却可以使用:
 

user[“my name”]=”tom”;

注意,在使用这种非标识符作为名称的属性时,仍然要用方括号语法来引用:
 

alert(user[“my name”]);


而不能写为:

alert(user.my name);


利用对象的这种性质,甚至可以很容易实现一个简单的哈希表,在本书的后面将会看到其应用。

由此可见,JavaScript中的每个对象都是动态可变的,这给编程带来了很大的灵活性,也和其他语言产生了很大的区别,读者可以体会这种性质。

如何动态的给对象object循环加上value1,value2,value3的属性:

可以利用for循环:

for(var i=0;i<3;i++){
   //    object.valuei = ...;//这么写不行,会直接给object加了一个属性valuei,而不是value1...
   //    object.value+""+i+"" =...//这么写也不行,编译报错
   //    object[value+""+i+""] =...//也不行,或报错,value未定义
         object["value"+i] =...//正确,注意object在增加属性的时候,object.a和object["a"]是一样的
}



© 著作权归作者所有

共有 人打赏支持
文文1
粉丝 21
博文 360
码字总数 118735
作品 0
长沙
程序员
私信 提问
JavaScript面向对象学习——3

对象基础介绍: 1、对象是JavaScript的基本数据类型。在java中Object是所有对象的基类,在JavaScript中同样,Object是所有对象的基类,那么Object自身属性和方法在所有对象中都会体现,只是不...

learn_more
2014/12/14
0
0
V8 Design Elements(翻译)

最近开始学习V8 Javascript引擎,这篇文章是翻译官方文档的,解释了V8之所以快的主要原因等,原文请参见http://code.google.com/apis/v8/design.html。 V8是一个新的为了提高Javascript程序速...

Sub
2013/08/14
0
0
如何禁止JavaScript对象重写?

译者按: 使用Object.preventExtensions()、Object.seal()和Object.freeze(),可以禁止重写JavaScript对象。 译者:Fundebug 原文:Preventing modification of JavaScript objects 由于Jav......

Fundebug
07/09
0
0
《编写可维护的 JavaScript》读书笔记第11章:不是你的对象不要动

什么是你的 只要维护代码是你的责任,那么你就拥有这些对象。 如果你的代码没有创建这些对象,不要修改它们,包括: 原生对象(Object、Array 等) DOM 对象(例如,document) 浏览器对象模...

张前程
2013/12/24
0
0
JavaScript 常量定义

相信同学们在看见这个标题的时候就一脸懵逼了,什么?JS能常量定义?别逗我好吗?确切的说,JS当中确实没有常量(ES6中好像有了常量定义的关键字),但是深入一下我们可以发现JS很多不为人知...

bxst
06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

使用 React 和 Vue 创建相同的应用,他们有什么差异?

在工作中应用 Vue 之后,我对它有了相当深刻的理解。 不过,俗话说「外国的月亮比较圆」,我好奇「外国的」 React 是怎么样的。 我阅读了 React 文档并观看了一些教程视频,虽然它们很棒,但...

阿K1225
13分钟前
0
0
如何使用Kubernetes的configmap通过环境变量注入到pod里

在Kubernetes官网里,有这样一篇文章,提到了Kubernetes里的一个最佳实践就是把应用代码同配置信息分开,一种方式就是使用Kubernetes 1.2里引入的configmap概念。 https://kubernetes.io/bl...

JerryWang_SAP
29分钟前
0
0
2天闭门培训|以太坊智能合约从入门到实战(北京)

2天培训 16个课时 探寻技术原理,精通以太坊智能合约开发 以太坊智能合约是现在应用的最广泛的区块链应用开发方式,HiBlock区块链社区针对以太坊智能合约的学习特别推出2天闭门研修班,通过2...

HiBlock
31分钟前
0
0
限定某个目录禁止解析php,限制user_agent,php相关配置

11月20日任务 11.28 限定某个目录禁止解析php 11.29 限制user_agent 11.30/11.31 php相关配置 1.限定某个目录禁止解析php 核心配置文件内容 <Directory /data/wwwroot/www.123.com/upload> p...

hhpuppy
42分钟前
2
0
Spring的好文章

孤傲苍狼 https://www.cnblogs.com/xdp-gacl/p/4249939.html 跟我学spring http://jinnianshilongnian.iteye.com/blog/1413846 SpringIoc 和Spring Aop 代理模式: 静态代理 动态代理 cglib代......

wangwei2134
53分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部