Я хотел бы знать, почему, если я передаю объект аргументов моему конструктору, значения свойств параметра будут перезаписаны последующими экземплярами.MyClass.prototype.settings = {} перезаписывается вторым экземпляром
Этого не происходит, когда я передаю аргументы в виде отдельных vars для конструктора.
Пример здесь: http://jsfiddle.net/KJ4CU/ и ниже
// First class
function Person(args) {
for(s in args) {
this.arguments[s] = args[s];
}
}
Person.prototype.arguments = {
"gender" : null,
"name" : null
};
Person.prototype.getGender = function() {
return this.arguments.gender;
};
// Second class
function Animal(gender, name) {
this.gender = gender;
this.name = name;
}
Animal.prototype.getGender = function() {
return this.gender;
};
var p1 = new Person({ gender : "gal", name : "Jane"});
var p2 = new Person({ gender : "boy", name : "John"});
var a1 = new Animal("female", "Tina");
var a2 = new Animal("male", "Toto");
document.getElementById("p1").innerHTML = p1.getGender(); // boy
document.getElementById("p2").innerHTML = p2.getGender(); // boy
document.getElementById("a1").innerHTML = a1.getGender(); // female
document.getElementById("a2").innerHTML = a2.getGender(); // male
Параметр 'prototype' свойство является долевой собственностью. Почему вы используете его, если хотите, чтобы каждый экземпляр имел свой собственный? – Ian
Экземпляр конкретного кода * always * входит в конструктор. Если вы хотите, чтобы каждый экземпляр имел свой собственный объект 'arguments', вам нужно создать объект в конструкторе. –
Я просто хочу знать, почему prototype.settings.gender перезаписывается, а prototype.gender - нет. – user3062896