javascript delete删除属性的注意点简单介绍

快乐打工仔 分类:实例代码

关于delete更多相关内容可以参阅javascript delete运算符一章节。

本章节只是介绍一下常见的delete删除属性需要注意的地方,希望能够给需要的朋友带来参考作用。

delete只是断开属性和宿主对象的联系,看如下代码:

var obj = {antzone:{url:"pipipi.net"}};
var innerObj = obj.antzone;
console.log(obj.antzone.url);
delete obj.antzone;
console.log(obj.antzone);
console.log(innerObj.url);

由此可见,只是断开属性和宿主对象的联系,而没有彻底的删除属性值。

delete能够删除自有属性,但是不能够删除继承的属性,看如下代码实例:

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:"pipipi.net"};
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原型一章节。

回复

我来回复
  • 暂无回复内容