我越來越熟悉JavaScript的原型世界和this
關鍵字。我是網絡世界的新手。今天,當我開始玩原型時,我看到一些奇怪的行爲,但我無法弄清爲什麼會發生這種情況。我創建了一個構造函數Group
如下:JavaScript:爲什麼要獲取最後插入的值?
// Code goes here
function Group(config) {
this.config = config;
this.getId = function() {
return this.config.id;
};
this.setId = function(id) {
this.config.id = id;
};
}
我用它在一個MyGroup
構造是這樣的:
function MyGroup(config) {
var myAttrs = ['id', 'name'];
this.g = new Group(config);
addGetterSetter(MyGroup, this.g, myAttrs)
}
addGetterSetter
是我寫的getter和setter添加到動態的屬性功能MyGroup
。
var GET = 'get',
SET = 'set';
function capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
function addGetterSetter(constructor, target, attrs) {
function addGetter(constructor, target, attr) {
var method = GET + capitalize(attr);
constructor.prototype[method] = function() {
return target[method]();
};
}
function addSetter(constructor, target, attr) {
var method = SET + capitalize(attr);
constructor.prototype[method] = function(value) {
return target[method](value);
};
}
for (var index = 0; index < attrs.length; index++) {
addGetter(constructor, target, attrs[index]);
addSetter(constructor, target, attrs[index]);
}
}
現在,當我使用MyGroup
,Group
這樣的:
var items = [{
id: 123,
name: 'Abc'
}, {
id: 131,
name: 'Bca'
}, {
id: 22,
name: 'bc'
}];
var groups = [];
items.forEach(function(item) {
var g = new MyGroup(item);
groups.push(g);
});
groups.forEach(function(g) {
console.log(g.getId()); //don't know why this logs 22 three times instead of all ids
});
在group.forEach
我不知道爲什麼最後一個項目的id是越來越記錄。我無法理解發生了什麼問題。我將如何獲得g.getId()
被調用的組。這是plunkr
在的script.js的線14我得到以下錯誤:'類型錯誤:目標[方法]是不是一個function'。看起來'getName'方法不能像你期望的那樣創建。 –
它爲我工作。不知道爲什麼它不適合你。 –