JavaScript原型和闭包之---为对象添加属性和方法以及in 、delete关键字(一)

来源:互联网 发布:license 开发 node 编辑:程序博客网 时间:2024/06/05 19:20

对象的动态特性是指:在对象创建出来之后,为对象添加新的属性或者方法。

给对象添加属性和方法有两种:

  1. 点语法
  2. []

使用点语法给对象添加属性和方法

      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  隐式转换

如何判断数组中是否存在指定的值

  1. for循环 如果找到了就输出
  2. 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]
阅读全文
0 0
原创粉丝点击