未能正确利用原型继承(js的问题)
2023-12-13 04:20:06
考虑下面代码:
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'
作者:王大冶
链接:https://juejin.cn/post/7161959592967012366
文章来源:https://blog.csdn.net/dxn16638400024/article/details/134903937
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!