请考虑以下代码:
var AryUser = new Array();
AryUser.prototype.HasUser = function() {
if(this.length > 0)
return true;
else
return false;
}
我已经在我的Node.js项目中的某些对象上使用了原型扩展。我遇到了article,这说明这是不好的做法。在执行此类函数期间是否会在服务器上产生开销?
谁能告诉我原因是什么? (任何官方文件转介都会有很大的帮助)
答案 0 :(得分:3)
您没有在上面提供的示例中扩展任何原型。 prototype
属性仅存在于函数上 - AryUser
是一个数组。上面的代码将抛出ReferenceError
。
您可能希望了解原型继承在JavaScript中的工作原理。阅读以下答案:https://stackoverflow.com/a/8096017/783743
据说,扩展原生函数的原型是一种不好的做法,例如Function
,Object
和Array
。这是因为你可能会覆盖别人的功能,可能会破坏他们的代码。
仅建议monkey patching扩展本机函数原型。阅读以下文章以了解the pros and cons of extending native function prototypes。
答案 1 :(得分:1)
我知道,我迟到了。我有分享的东西。这是实现您想要做的事情的一种方式。
function UserArray() {
Array.call(this);
}
UserArray.prototype = Object.create(Array.prototype);
UserArray.prototype.constructor = UserArray;
UserArray.prototype.hasUser = function() {
return this.length > 0;
};
var userArray = new UserArray();
userArray.hasUser();//false;
userArray.push({name: 'foo'});
userArray.hasUser();//true;
userArray instanceof UserArray;//true
userArray instanceof Array;//true
typeof Array.prototype.hasUser === 'undefined'//true
答案 2 :(得分:-1)
也许这些文章提供了一些见解:
底线是:扩展您不拥有的对象的原型,如果浏览器发生变化,它不会出现面向未来的问题,而且其他人也会遇到问题。