JavaScript原型和閉包之---爲對象添加屬性和方法以及in 、delete關鍵字(一)

對象的動態特性是指:在對象創建出來之後,爲對象添加新的屬性或者方法。

給對象添加屬性和方法有兩種:

  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]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章