在不同的上下文中访问自身内部的类引用
Accessing reference of Class inside itself while in different context
function Foo(){
}
Foo.prototype={
foo:'some text'
,bar:function(){
console.log('Want to be able to retrieve foo of Foo',this.foo);
}
}
var instance=new Foo();
instance.bar.apply({});
这里是jsfiddle的链接:
http://jsfiddle.net/dnJFt/1/我试着玩的范围,把类的建设内部包装与var self
里面。返回instance of Class
后,参照var self
:
function Foo() {
var self;
function Foo_in(){
}
Foo_in.prototype={
foo:'some text'
,bar:function(){
console.log('Want to be able to retrieve foo of Foo',self);
}
}
return self=new Foo_in();
}
var instance=new Foo();
instance.bar.apply({});
这是jsfiddle的链接:http://jsfiddle.net/dnJFt/2/
但我的解决方案是坏的,因为每次我重建Class
和它的原型方法。
有更简单的解决方案吗?
试一试:
var Foo = (function () {
var Foo_in = function (){};
Foo_in.prototype={
foo:'some text',
bar:function(){
console.log('Want to be able to retrieve foo of Foo',self);
}
}
var self = new Foo_in();
return Foo_in;
})();
使用这段代码,您在自动调用函数作用域中创建类,并在该作用域中声明self变量,以便在类方法中可以访问它,然后返回将分配给全局Foo变量的类引用。通过这种方式,您可以获得对self变量的引用,并且只需创建一次类。
您可以将Foo.prototype
对象作为参数传递:
function Foo() {}
Foo.prototype = {
foo: 'some text',
bar: function ( proto ) {
console.log( 'foo: ', proto ? proto.foo : this.foo );
}
}
var instance = new Foo();
所以…
instance.bar() // 'some text'
instance.bar.apply( {}, [ Foo.prototype ] ) // 'some text'
现场演示: http://jsfiddle.net/wpyZN/
替代用法:
instance.bar() // 'some text'
instance.bar.apply( {}, [ instance ] ) // 'some text'
现场演示: http://jsfiddle.net/wpyZN/1/
更新:我对闭包解决方案的看法:
var Foo = (function () {
function F() {}
var proto = F.prototype = {
foo: 'some text',
bar: function () {
console.log( 'foo: ', proto.foo );
}
}
return F;
})();
var instance = new Foo();
instance.bar.apply( {} );
现场演示: http://jsfiddle.net/KT7vU/
因此,bar
方法使用proto
引用来访问foo
值…
在bar中执行this.foo
不起作用(apply-调用更改了this
的值,因此它不再指向实例)。因此,我们必须提供对原型对象的手动引用,该对象保存所需的foo
值。最合适的方法是我上面的代码中提供的方法…
相关文章:
- 调用setTimeout内部的函数时发生引用错误
- 可以“;超级“;可以在子类的方法内部使用,在不直接引用的情况下调用相应的超类方法
- 对使用函数构造函数创建的函数的内部引用
- 为什么可以在内部函数成员中访问对象引用,而不能在内部属性成员中访问
- JavaScriptEs6在内部函数中引用了这一点
- 如何在ES6中使用Arrow函数引用对象内部的其他函数
- "这个“;对象函数内部的引用
- 从模块内部引用特定的表单元素
- 从该函数内部引用匿名函数
- 为什么要求始终返回具有新内部引用的新对象
- ES6类方法是在内部引用类实例的最有效方法
- 从事件处理程序函数(pickadate.js)内部引用当前DOM元素
- 如何在其内部引用jQuery对象'的方法调用
- 如何在javascript对象中进行内部引用
- 需要从另一个外部. js文件内部引用外部脚本
- 使用'this'以及在对象内部引用的对象名称
- 内部引用对象上的Javascript垃圾收集器
- 为什么可以't我从对象文字内部引用对象文字
- 从自身内部引用 javascript 函数
- Javascript:如何在函数内部引用匿名函数