【发布时间】:2013-04-14 00:06:46
【问题描述】:
考虑以下示例
var Foo = function(){
this.identity = 'Foo';
};
Foo.prototype.bar = function(){
this.identity = 'bar';
};
var fooInstance = new Foo(),
bar = new fooInstance.bar();
问题
在bar 内,如何获取fooInstance 变量? Foo 的孩子有没有办法将其父母识别为fooInstance?例如,我如何在bar 中创建一个返回fooInstance 的函数。需要注意的是,bar 必须使用 prototype 命令创建,并且不能简单地嵌套在 Foo 中以通过这种方式访问任何 Foo 实例。
我的想法以及它们为什么行不通
这样重写函数是可能的
var Foo = function(){
this.identity = 'Foo';
};
Foo.prototype.createBar = function(){
var parent = this;
function bar(){
this.parent = parent;
this.identity = 'bar';
};
return new bar();
};
var fooInstance = new Foo(),
bar = fooInstance.createBar();
然而,为了创建易于阅读的代码,如果不需要,我宁愿不使用这种方法。
进一步说明
让我把这个问题放在上下文中。我在 CanvasRenderingContext2D 上进行原型设计,以便画布元素的所有上下文都包含我的新方法。让我们调用该方法 foo 并假设 context 是创建的画布上下文。如何创建像“new context.foo()”这样的变量,以便 foo 函数可以使用上下文变量?
【问题讨论】:
-
什么是
fooInstance?Foo的“孩子”和“父母”是什么?您正在调用但未定义的bar方法是什么? “原型命令”是什么意思? -
顺便说一句,this answer 可能会帮助您了解变量和属性之间的区别。
-
让我把这个问题放在上下文中。我在 CanvasRenderingContext2D 上进行原型设计,以便画布元素的所有上下文都包含我的新方法。让我们调用该方法 foo 并假设 context 是创建的画布上下文。如何创建像“new context.foo()”这样的变量,以便 foo 函数可以使用上下文变量?
-
好的,我现在看到你的问题了。只是在寻找一个骗子,如果我找不到它,我会回答你的问题
-
Prototype for private sub-methods 的可能重复项,也可参见 this
标签: javascript function constructor prototype