如果我们在任何对象的Node.js中扩展原型,会出现什么问题?

考虑下面的代码:

var AryUser = new Array(); AryUser.prototype.HasUser = function() { if(this.length > 0) return true; else return false; } 

我已经在我的Node.js项目中使用扩展的一些对象的原型。 我遇到了一篇文章 ,说这是不好的做法。 它是否会在执行这些function时在服务器上创build开销?

谁能告诉我是什么原因? (任何正式的文件转介将有很大的帮助)

您在上面提供的示例中没有扩展任何原型。 prototype属性只存在于函数中 – AryUser是一个数组。 上面的代码会抛出一个ReferenceError

您可能希望了解原型inheritance如何在JavaScript中工作。 阅读以下答案: https : //stackoverflow.com/a/8096017/783743

这就是说,扩展原生函数的原型,如FunctionObjectArray是一个不好的做法。 这是因为你可能会覆盖别人的function,可能会破坏他们的代码。

扩展本机函数原型只推荐用于猴子修补 。 阅读以下文章,了解扩展本地函数原型的优缺点 。

我知道,我迟到了。 我有一些东西要分享。 这是实现你想要做的事情的一种方法。

 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 

也许这些文章提供了一些见解:

底线是:扩展你不拥有的对象的原型,如果浏览器改变,这是不是未来的certificate,并且你从其他人的图书馆遇到问题。