2014-05-16 144 views
1

如何从另一个对象实例访问此对象?从方法实例访问此变量

var containerObj = { 
    Person: function(name){ 
     this.name = name; 
    } 
} 
containerObj.Person.prototype.Bag = function(color){ 
    this.color = color; 
} 
containerObj.Person.prototype.Bag.getOwnerName(){ 
    return name; //I would like to access the name property of this instance of Person 
} 

var me = new Person("Asif"); 
var myBag = new me.Bag("black"); 
myBag.getOwnerName()// Want the method to return Asif 

回答

2

不要把构造函数放在另一个类的原型上。使用工厂模式:

function Person(name) { 
    this.name = name; 
} 
Person.prototype.makeBag = function(color) { 
    return new Bag(color, this); 
}; 

function Bag(color, owner) { 
    this.color = color; 
    this.owner = owner; 
} 
Bag.prototype.getOwnerName = function() { 
    return this.owner.name; 
}; 

var me = new Person("Asif"); 
var myBag = me.makeBag("black"); 
myBag.getOwnerName() // "Asif" 

相关的模式来解决这个问题:Prototype for private sub-methodsJavascript - Is it a bad idea to use function constructors within closures?

+0

@MrCode:谢谢,当然它应该。如果你只是编辑帖子,我不会介意:-) – Bergi

+0

+1没问题,下次我会编辑:) – MrCode

+0

我在调用makeBag方法后设置了me.name =“Smo”。然后myBag.getOwnerName()返回John。这就是我想要的,但为什么会这样呢?我的意思是,当传入的对象改变时,为什么this.owner会改变? –