私はコンストラクタ呼び出しのために準備している機能を、持っている...JavaScriptでオブジェクトのプロパティが更新されないのはなぜですか?
function Queue() {
if (!(this instanceof Queue)) return new Queue();
this.capacity = {};
this._count = 0;
}
そして、これらの方法は、Queue
のprototypeプロパティ...すべてコーシャ右側に設定されていますか?
Queue.prototype.enqueue = function(name, options) {
this.capacity[name] = options || {};
this.count();
if (this._count > 5) {
return 'Max capacity has been reached—which is five, please dequeue....'
}
};
Queue.prototype.count = function() {
var total = Object.keys(this.capacity);
total.forEach(function(elem) {
this._count++
});
if (this._count == 1) {
console.log(this.capacity[Object.keys(this.capacity)])
console.log('There is one item in the queue');
} else {
console.log(this.capacity[Object.keys(this.capacity)])
console.log('There are ' + this._count + ' items in the queue');
}
};
私はときエンキュー/カウント方法火災インクリメントするthis._count
を得るのですか私の質問は?私は得続ける:
There are 0 items in the queue
は私が.prototype
性質上、それを追加することができます知っていると置くカウント機能で、それは地元のVARを参照持っている...その
Queue.prototype.count = function() {
var total = Object.keys(this.capacity), count = 0;
total.forEach(function(elem) {
this.count++
});
Queue.prototype.call =コール// < - 変な電話?
if (this.count == 1) {
console.log(this.capacity[Object.keys(this.capacity)])
console.log('There is one item in the queue');
} else {
console.log(this.capacity[Object.keys(this.capacity)])
console.log('There are ' + this.count + ' items in the queue');
}
}
しかし、それはエレガントではないようです...
ありがとうございます!あなたが修正(機能をバインドする)は、次の試してみてくださいforEachの
内Queue.prototype.count = function() {
var total = Object.keys(this.capacity);
total.forEach(function(elem) {
this._count++
}.bind(this)); //bind the context
if (this._count == 1) {
console.log(this.capacity[Object.keys(this.capacity)])
console.log('There is one item in the queue');
} else {
console.log(this.capacity[Object.keys(this.capacity)])
console.log('There are ' + this._count + ' items in the queue');
}
};
'this._count + = Object.keys(this.capacity).length'に単純化することができます。そして、 '_count'をゼロにリセットするか、' + = 'の代わりに' = 'を使うことを意味しませんでしたか? –