我有一个课程,我想用几种新方法扩展。
为了不污染对象的命名空间(可能覆盖现有方法),我希望将这些方法分组到一个属性名称下。
如何在扩展容器内获取原始对象实例的引用?
澄清:
// here's what I have
obj = function () {
// something happens here
this.property = "XYZ"
}
var x = new obj();
console.log(x.property); // logs "XYZ"
// here's how I want to extend it
obj.prototype.extension = {property: "ABC"};
obj.prototype.extension.whatstheproperty = function () {
// how to get a reference to the obj's instance here?
console.log(this.property); // logs "ABC" not "XYZ" for obvious reasons
// QUESTION -> how get get "XYZ"?
}
var z = new obj();
z.extension.whatstheproperty();
我的猜测是必须有一种方法将父实例的引用存储为extension
的属性。
一种显而易见的方法是在父实例生成时设置它:
x = new obj();
x.extension.parent = x;
然后我可以在this.parent
的所有方法中访问extension
。
但我觉得必须有更好的方法,特别是因为我不知道新的obj
何时被实例化。
我只希望每个新的obj都有一个属性extension
,它有一个引用父实例的属性。
我该如何处理?