JavaScript原型链

JavaScript原型链,javascript,prototype-chain,Javascript,Prototype Chain,我试图更好地理解通过同一构造函数创建的不同对象实例之间的对象原型之间的关系 假设我有这个: (function(ns){ ns.User = function(Id){ this.Name = "Some Name for " + Id; this.Id = Id; }; })(foo = foo || {}); foo.User.prototype = function(){ var getName = function(){return this.Name;} retu

我试图更好地理解通过同一构造函数创建的不同对象实例之间的对象原型之间的关系

假设我有这个:

(function(ns){
 ns.User = function(Id){
    this.Name = "Some Name for " + Id;
    this.Id = Id;
};

})(foo = foo || {});

foo.User.prototype = function(){
var getName = function(){return this.Name;}
return{
    getName:getName
};
}();

$(function(){

var approver = new foo.User("approver1");
alert(approver.getName()); //works fine, shows approver1

var approver2 = new foo.User("approver2");
alert(approver2.getName()); //works fine, shows approver2

approver.prototype.getName = function(){alert(this.Name + " modified");} //<- this doesn't work (why, if foo.User, approver, and approver2 are just js objects with the same prototype chain?)
approver.getName = function(){alert(this.Name + " modified another way");} //<-re-defined this way works but only for approver object, not it's prototype that came from foo.User
});
(函数(ns){
ns.User=函数(Id){
this.Name=“某个名称代表”+Id;
这个.Id=Id;
};
})(foo=foo |{});
foo.User.prototype=函数(){
var getName=function(){返回this.Name;}
返回{
getName:getName
};
}();
$(函数(){
var approver=新的foo.User(“approver 1”);
警报(approver.getName());//工作正常,显示approver 1
var approver2=新的foo.User(“approver2”);
警报(approver2.getName());//工作正常,显示approver2

approver.prototype.getName=function(){alert(this.Name+“modified”);}//对象实例没有prototype属性。其构造函数的prototype用于查找在实例上找不到的成员:

对象实例没有prototype属性。但实例的prototype属性包含prototype属性的引用

考虑以下示例:

var Person=函数(名称){
this.name=名称;
};
Person.prototype.walk=function(){
这个.step().step().step();
};

var bob=new Person(“bob”)
这个问题可能应该是“我不太明白
new
关键字在JS中是如何工作的”——要查看非常详细的描述,请参阅:什么是“foo=foo |{”是吗?这个问题可能可以用很多方式表达;但是,我相信你提到的另一个问题有助于澄清。这是我所见过的许多关于新物体原型的内部性质的第一次提及。