1

次のコードを検討してください。

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

私はすでにNode.jsプロジェクトのいくつかのオブジェクトを拡張するプロトタイプを使用しています。私はそれが悪い習慣であると述べている記事に出くわしました。そのような機能の実行中にサーバーにオーバーヘッドが発生しますか?

理由を教えてもらえますか?(公式文書の紹介は非常に役立ちます)

4

3 に答える 3

3

上記の例では、プロトタイプを拡張していません。prototypeプロパティは関数にのみ存在します-配列AryUserです。上記のコードはをスローしReferenceErrorます。

JavaScriptでプロトタイプの継承がどのように機能するかを知りたいと思うかもしれません。次の回答をお読みください:https ://stackoverflow.com/a/8096017/783743

そうは言っても、、、などのネイティブ関数のプロトタイプを拡張することは悪い習慣です。これは、他の人の関数を上書きして、コードを壊してしまう可能性があるためです。FunctionObjectArray

ネイティブ関数プロトタイプの拡張は、モンキーパッチの場合にのみ推奨されます。次の記事を読んで、ネイティブ関数プロトタイプを拡張することの長所と短所を理解してください。

于 2013-02-12T07:50:54.013 に答える
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
于 2015-01-09T08:45:25.233 に答える
-1

たぶん、これらの記事はいくつかの洞察を提供します:

つまり、所有していないオブジェクトのプロトタイプを拡張することは、ブラウザが変更されても将来にわたって利用できるわけではなく、他の人が同じことをしているライブラリで問題が発生する可能性があります。

于 2013-02-12T07:57:19.103 に答える