Basit düzeltme, düzgün bir şekilde atamaktır. Burada onunla oynayın:
function Employee(name) {
this.name = name;
}
var m = new Employee("Bob");
var working = {
isWorking: true
};
Employee.prototype.working = working;
alert(m.working.isWorking);
BİRDEN çalışanlar için daha iyi bir düzeltme, bir sınıf, o örneklerini oluşturmak yapmaktır http://jsfiddle.net/MarkSchultheiss/p6jyqbgv/1/ Öncelikle, Employee
bir örneğini önce oluşturduk
"use strict";
function makeClassStrict() {
var isInternal, instance;
var constructor = function(args) {
if (this instanceof constructor) {
if (typeof this.init == "function") {
this.init.apply(this, isInternal ? args : arguments);
}
} else {
isInternal = true;
instance = new constructor(arguments);
isInternal = false;
return instance;
}
};
return constructor;
}
var EmployeeClass = makeClassStrict();
EmployeeClass.prototype.init = function(employeeName, isWorking) {
var defaultName = 'notbob';
this.name = employeeName ? employeeName : defaultName;
this.working = !!isWorking;
};
// call this to get the name property
EmployeeClass.prototype.getName = function() {
return this.name
};
//note no "new" needed due to the makeClassStrict that does that
var m = EmployeeClass("Bob");
alert(m.working +":"+ m.name);
m.working = true;
alert(m.working +":"+ m.name);
var notbob = EmployeeClass("Charlie",false);
alert(notbob.working +":"+ notbob.name);
alert(notbob.getName()+ m.getName());
o anda şantiye prototip bir başvuru alır. Prototipi daha sonra değiştirirseniz, mevcut örnekler bunu yansıtmaz. Bir örnek oluşturduktan sonra, genellikle prototipi değiştirmekten ziyade genişletmeniz beklenir. –
Örneğin prototip nesnesine yapılan başvurusu, yapım zamanında (yani, yeni olan satır) ayarlanır. 'Foo.prototype' özellik nesnesinin tamamının değiştirilmesi, bu referansın sonraki örnekte değiştirilmeyecektir. Ancak, 'Foo.prototype' nesnesindeki değişiklikler _will_ görülebilir (çünkü aynı nesne), örn. Bunun yerine Employee.prototype.isWorking = true 'yaptıysam;', size Daha fazlasını okumak için –
beklediğiniz görecekti, bu prototypal mirasın aşağı gerçekten iyi run: http://markdalgleish.com/2012/10/a -touch-of-sınıf-kalıtım-in-javascript/ – br3nt