JavaScript原型和闭包之---为对象添加属性和方法以及in 、delete关键字(一)
来源:互联网 发布:license 开发 node 编辑:程序博客网 时间:2024/06/05 19:20
对象的动态特性是指:在对象创建出来之后,为对象添加新的属性或者方法。
给对象添加属性和方法有两种:
- 点语法
- []
使用点语法给对象添加属性和方法
var obj = { name: "kong", age:23 } // 使用点语法 : 给obj对象添加属性和方法 obj.hobby = "runing"; obj.eat = function(){ console.log("开开心心的大吃!") } console.log(obj); obj.eat();
如果给代码做些变化呢
obj.name = "diligentkong"; console.log(obj.name); //输出 diligentkong
**使用点语法进行赋值的时候,如果对象存在该属性,是修改操作;
如果对象不存在该属性,是给该对象新增属性并且赋值**
使用中括号[]的方法
对象名[属性名] 注意:这里的属性名是字符串
通过对象名[属性名]的方式可以做到:
1.获取对象的属性值
2.修改对象的属性值
3.为对象新增属性并赋值
看例子
获取对象的属性:这是获取obj的name属性
console.log(obj["name"]); //diligentkong
修改对象的属性值,将obj对象的name属性的值修改为kongkong
obj["name"] = "kongkong"; console.log(obj["name"]); //kongkong // 为对象新增属性并赋值 obj["sing"] = { singer : "张信哲" }; console.log(obj["sing"]); obj["drink"]=function(){ console.log("我喜欢和白开水"); } obj[drink](); //我喜欢和白开水
这里要说一下in关键字
in关键字的用法
1.在for..in 循环中遍历对象的键
2.判断属性是否存在对象中 语法: 属性名 in 对象
举例:for...in var obj = { name:'kong', age:23 } for (var k in obj) { console.log(k);//输出 name age console.log(typeof k); //输出 string string }
通过以上可以发现 对象的键为string字符串类型
也就是说 使用in关键字的时候,属性名称为字符串类型,需要用引号引起来
举例:
var paraName = "name"; var isExsit = paraName in obj; console.log(isExsit); // true简单写成:console.log("hobby" in obj);
在混入式继承关系上,如果要把一个对象的属性和方法 拿过来用到另一个独享上,要使用[]的方式获取属性、添加属性。若是使用点语法,那么会把k当做变量,而不是对象的键。看例子
//当前没有的属性和方法,别人有,拿过来用 ,就是继承(继承后续会解释的)
var o = { } var obj = { name :"diligentkong", age : 18, sayHello :function () { console.log("Hello world"); } } //混入式继承 for(var k in obj){ // 一定要使用[]的方式,否则会把k当做属性 o[k] = obj[k]; } console.log(o);
in 关联数组
var arr=[2,4,6,8,10];console.log(0 in arr); // 输出true
刚才提到 对象的键是字符串类型,为什么在关联数组的时候,打印输出的是true呢?
因为 in关键字操作数组的时候判断的是索引是否存在而不是值,当索引不是字符串的时候,会做一个隐式转换,将0 修改为”0”
看
console.log("0" in arr); // true也就是console.log(0 in arr); <=>console.log("0" in arr); // true 隐式转换
如何判断数组中是否存在指定的值
- for循环 如果找到了就输出
- indexOf 返回值为指定的数对应的索引,如果没有找到 返回-1
console.log(arr.indexOf(9)); // -1
delete关键字
1.delete关键字可以用来删除对象的属性,还有未使用var声明的变量
2.delete关键字有返回值 用来表示删除属性是否成功
3.如果删除的是不存在的属性,返回值为true
4.如果删除的属性存在原型当中,那么返回值为true,但是并未删除
自己对号入座吧!
var obj = { name : "kong", age : 20 } console.log(obj.name); var result = delete obj.name; console.log(obj.name, result); // undefined true var num = 10; num1 = 100; console.log(num1); //100 result = delete num1; console.log(window.num1, result); // undefined true var num = 10; var result = delete num; console.log(result); //false var result= delete obj.gender; console.log(result); //true console.log(obj.toString()); //[object Object] var result = delete obj.toString; console.log(result); //true console.log(obj.toString());//[object Object]
- JavaScript原型和闭包之---为对象添加属性和方法以及in 、delete关键字(一)
- JavaScript原型和闭包之---原型(三)
- javascript原型和闭包之------原型链 (七)
- javascript面向对象(对象的创建以及属性和方法的添加)
- prototype为对象添加属性和方法
- javascript添加/删除 对象属性和方法
- Javascript 原型属性和原型方法
- javascript中Object类原型对象的属性和方法
- JavaScript原型和闭包之---构造函数(二)
- javascript原型和闭包之---Function(六)
- javascript面向对象(七)原型另外的作用--扩充对象的属性和方法
- Javascript的原型对象和prototype属性
- javascript原型和闭包之------闭包
- JavaScript的两种面向对象方法--原型继承(prototype)和函数继承(闭包)
- 深入理解javascript原型和闭包(1)-->一切都是对象
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- 深入理解javascript原型和闭包(2)——函数和对象的关系
- JS 60秒后重发送验证码
- React Native 第三天
- oracle exists用法解析
- Solr查询与sql对比转化
- 【JAVA300】11-15 笔记
- JavaScript原型和闭包之---为对象添加属性和方法以及in 、delete关键字(一)
- 数据类型转换之 QString与char*
- js按位 或 与 运算
- (最易理解)51Nod
- 背包问题: HDU1114Piggy-Bank
- LVS系列—负载均衡之工作原理说明(NAT模式)
- Array 【思维】水
- ReactNative朋友圈API设计
- [android-SignalStrength]