私はJavascriptプログラミングは初めてではありませんが、それがプロトタイプオブジェクトであり、継承であることを理解できません。私はこの問題を解決しようとしているので、このことを理解するためにコードにどのような質問をする必要がありますか?
2 に答える
JavaScript での「クラスベース」のオブジェクト作成の使用:
var Wallet = function (pin, starting_balance, overdraft) {
this.amount = starting_balance;
this.pin = pin;
this.overdraft = overdraft;
};
Wallet.prototype.addFunds = function (amount) {
this.amound += amount;
};
Wallet.prototype.withdrawFunds = function (amount) {
if (this.amount + this.overdraft >= amount) {
this.amount -= amount;
return new Wallet(this.pin, amount, this.overdraft);
}
};
Wallet.prototype.displayBalance = function () {
var cents = this.amount % 100,
dollars = (this.amount - cents) / 100,
total = dollars + "." + (cents > 9 ? cents : ("0" + cents));
var output = "Current Balance: $" + total;
};
var myWallet = new Wallet(1234, 2000, 100000);
myWallet.displayBalance(); // "Current Balance: $20.00"
を返す関数でnew
演算子を使用することにより、コンストラクター関数のを変更できます。constructor
this
prototype
すなわち: 変更しWallet.prototype
ます。
次に、すべてWallet
の は同じ機能を持ちます。
もちろん、これはあまり安全な財布ではありません。世界中の誰もがやって来て、変わることができmyWallet.amount
ますmyWallet.pin
。
しかし、ウォレットをより安全にすると:
var Wallet = function (pin, amount, overdraft) {
var balance = amount,
keyCode = pin,
padding = overdraft;
};
Wallet.prototype.depositFunds = function (amount) { balance += amount; }; // does NOT work
これはうまくいきません。プロトタイプは、コンストラクター関数によって返されたオブジェクトのパブリック プロパティにのみアクセスできます
つまり、コンストラクターを介してオブジェクトに追加されたもの、または事後に手動で何かを追加したときにObj.prototype.<whatever>
のみアクセスできるということです。this.<whatever> = <x>;
myObj.property = <x>;
このブログ投稿、Understanding JavaScript Prototypesは、すべてを理解するのに本当に役立ちました。
オブジェクトのプロトタイプによって定義されたメソッドは、オブジェクトで直接呼び出すことができます。たとえば、「doSomething」というメソッドを持つプロトタイプが obj にある場合、 を呼び出すことができますobj.doSomething()
。