オブジェクトにメソッドを追加私はFoo
オブジェクトJavascriptが
がどのように私はbar()
メソッドを追加することにより、このオブジェクトを拡張し、またFoo
の将来のインスタンスは、このメソッドを持っていることを確認することができたとし?
オブジェクトにメソッドを追加私はFoo
オブジェクトJavascriptが
がどのように私はbar()
メソッドを追加することにより、このオブジェクトを拡張し、またFoo
の将来のインスタンスは、このメソッドを持っていることを確認することができたとし?
あなたはのFooのプロトタイプに追加する必要があります。
function Foo(){}
Foo.prototype.bar = function(){}
var x = new Foo()
x.bar()
JavaScriptのように再利用可能なオブジェクトを作成する方法はたくさんあります。以下はあなたの例で動作します
:Mozillaはここに素敵な紹介を持って
function Foo(){
this.bar = function(){
alert("Hello World!");
}
}
myFoo = new Foo();
myFoo.bar(); // Hello World
barを関数にする関数を作ることができます。それは単なる文字列、データ型やブール
Foo.bar = "a place";
このすべてを割り当てられるプロパティとして
Foo.bar = function(passvariable){ };
あなたがFoo
を作成しているかに依存し、どのように.bar()
を使用する予定。
まず、オブジェクトにコンストラクタ関数を使用していますか?
var myFoo = new Foo();
もしそうなら、あなたはそのように、.bar
でFoo
機能のprototype
プロパティを拡張することができます。
function Foo() { /*...*/ }
Foo.prototype.bar = function() { /*...*/ };
var myFoo = new Foo();
myFoo.bar();
をこのようにして、Foo
の各インスタンスは、今SAMEへのアクセス権を持っています.bar
のインスタンス。ウィットに
:.bar
はthis
へのフルアクセスを持っていますが、コンストラクタ関数内variables
に全くアクセスがあります:別の方法では
function Foo() { var secret = 38; this.name = "Bob"; }
Foo.prototype.bar = function() { console.log(secret); };
Foo.prototype.otherFunc = function() { console.log(this.name); };
var myFoo = new Foo();
myFoo.otherFunc(); // "Bob";
myFoo.bar(); // error -- `secret` is undefined...
// ...or a value of `secret` in a higher/global scope
を、あなたは任意のオブジェクトを返すように関数を定義することができ.bar
と、そのオブジェクトのプロパティとして作成(this
ない)、この様式で
function giveMeObj() {
var private = 42,
privateBar = function() { console.log(private); },
public_interface = {
bar : privateBar
};
return public_interface;
}
var myObj = giveMeObj();
myObj.bar(); // 42
、新しいオブジェクトを作成する関数があります。
これらのオブジェクトのそれぞれには、.bar
関数が作成されています。
各.bar
関数は、特定のオブジェクトを返す関数内の "private"変数に、クロージャという名前でアクセスします。
各.bar
はまだあなたがmyObj.bar();
のような関数は常に(私の例Foo
では、public_interface
)myObj
を参照します呼び出すthis
、としてだけでなくthis
へのアクセス権を持っています。
この形式の欠点は、これらのオブジェクトを何百万も作成しようとすると、それもメモリに食べられる.bar
の何百万ものコピーであるということです。
コンストラクタ内でthis.bar = function() {};
を設定することもできます。また、コンストラクタ内のプライベート変数へのクロージャーアクセスが上限になり、メモリ要件が増えることになります。
だから最初の質問です:
は あなたの方法は、(this
またはmyObj.X
を通じて)オブジェクト自体を介してアクセスすることができない「プライベート」のデータを、読み取り/変更するためのアクセス権を持っていることを期待しますか?
と2番目の質問は次のとおりです。メモリは大きな問題になるだろうように、あなたがそれらにそれぞれ自分の個人的な機能を与える場合 あなたは、これらのオブジェクトを十分に作っているのではなく、1を共有するためにそれらを与えますか?あなたはすべての三角形と、すべてのテクスチャハイエンドの3Dゲームで自分.draw
機能を与えた場合
例えば、それはやり過ぎかもしれないが、それはおそらく...繊細なシステムではフレームレートに影響を与える
しかし、ページごとに5つのスクロールバーを作成し、それぞれのアプリケーションがその同じ位置を読み取り/設定するためのアクセス権を持たせることなく、それぞれの位置を設定し、ドラッグされているかどうかを把握できるようにしたい場合、あなたが既に10,000行(またはそれ以上)であるかもしれないと仮定して、5つの余分な関数があなたのアプリを殺すことになるのを恐れる理由は本当にありません。