javascript delete刪除屬性的注意點簡單介紹

antzone發表於2017-04-05

關於delete更多相關內容可以參閱javascript delete運算子一章節。

本章節只是介紹一下常見的delete刪除屬性需要注意的地方,希望能夠給需要的朋友帶來參考作用。

delete只是斷開屬性和宿主物件的聯絡,看如下程式碼:

[JavaScript] 純文字檢視 複製程式碼
var obj = {antzone:{url:"softwhy.com"}};
var innerObj = obj.antzone;
console.log(obj.antzone.url);
delete obj.antzone;
console.log(obj.antzone);
console.log(innerObj.url);

由此可見,只是斷開屬性和宿主物件的聯絡,而沒有徹底的刪除屬性值。

delete能夠刪除自有屬性,但是不能夠刪除繼承的屬性,看如下程式碼例項:

[JavaScript] 純文字檢視 複製程式碼
function inherit(p){ 
  if(p == null){  // 不能從null中繼承
    throw TypeError();
  }
  if(Object.create){ 
    return Object.create(p);
  }
  var t = typeof p;
  if(t !== "object" || t !== "function"){  //要繼承的物件 型別要符合
    throw TypeError();
  }
  function f(){ }; //定義一個空的建構函式
  f.prototype = p; //原型指向要繼承的物件p
  return new f();  //建立f物件,此物件繼承自p
}
  
var obj = {url:"softwhy.com"};
var newObj = inherit(obj);
newObj.age = 3;
console.log("url = "+newObj.url+" age = "+newObj.age);
delete newObj.url;
delete newObj.age;
console.log("url = "+newObj.url+" age = "+newObj.age);

上面的程式碼說明繼承的屬性是不可以被刪除的,上面的程式碼可能不少朋友有點看不懂,下面就進行一下注釋。

一.程式碼註釋:

(1).function inherit(p){ },此函式實現了繼承效果,引數p是要繼承的原型物件例項。

(2).if(p == null){

  throw TypeError();

},不能從null中繼承,會丟擲一個錯誤。

(3).if(Object.create){ 

  return Object.create(p);

},首先判斷當前瀏覽器是否支援Object.create()方法,如果支援則建立一個原型物件是p的物件。

(4).var t = typeof p,判斷p的型別。

(5).if(t !== "object" || t !== "function"){

  throw TypeError();

},傳入的p一定要是引用型別,如果傳入的是簡單型別的就會報錯。

(6).function f(){ },建立一個空的函式,這樣比較乾淨。

(7).f.prototype = p,設定它的原型物件為p。

(8).return new f(),返回物件例項。

二.相關閱讀:

(1).Object.create()方法可以參閱Object.create()一章節。

(2).prototype可以參閱javascript prototype原型一章節。

相關文章