未能正确利用原型继承(js的问题)

考虑下面代码:

BaseObject = function(name) {
    if (typeof name !== "undefined") {
        this.name = name;
    } else {
        this.name = 'default'
    }
};

上面代码比较简单,就是提供了一个名字,就使用它,否则返回 default:

var firstObj = new BaseObject();
var secondObj = new BaseObject('unique');

console.log(firstObj.name);  // -> 'default'
console.log(secondObj.name); // -> 'unique'

但是,如果这么做呢:

delete secondObj.name;

会得到:

console.log(secondObj.name); // 'undefined'

当使用 delete 删除该属性时,就会返回一个 undefined,那么如果我们也想返回 default 要怎么做呢?利用原型继承,如下所示:

BaseObject = function (name) {
    if(typeof name !== "undefined") {
        this.name = name;
    }
};

BaseObject.prototype.name = 'default';

BaseObject 从它的原型对象中继承了name 属性,值为 default。因此,如果构造函数在没有 name 的情况下被调用,name 将默认为 default。同样,如果 name 属性从BaseObject的一个实例中被移除,那么会找到原型链的 name,,其值仍然是default。所以'

var thirdObj = new BaseObject('unique');
console.log(thirdObj.name);  // -> Results in 'unique'

delete thirdObj.name;
console.log(thirdObj.name);  // -> Results in 'default'

相关推荐

最近更新

  1. TCP协议是安全的吗?

    2023-12-23 07:50:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-23 07:50:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-23 07:50:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-23 07:50:01       20 阅读

热门阅读

  1. hive高级查询

    2023-12-23 07:50:01       35 阅读
  2. MAX96712学习记录及编程实践

    2023-12-23 07:50:01       42 阅读
  3. 鼠标悬浮在树组件节点上展示当前节点名称

    2023-12-23 07:50:01       38 阅读
  4. Linux基础 - Linux ARM 原子读写

    2023-12-23 07:50:01       39 阅读