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的链接:
我正在尝试使用范围将类构建在其中包含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
并且它是原型方法。
有更简单的解决方案吗?
答案 0 :(得分:0)
尝试这种方式:
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;
})();
使用此代码,您可以在自动调用函数范围中创建类,并在该范围内声明自变量,以便在类方法中可以访问它,然后返回将分配给该类的类的引用。全局Foo变量。通过这种方式,您可以获得对自变量的引用,并且只创建一次类。
答案 1 :(得分:0)
您可以将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
值...
在栏内执行this.foo
不起作用(apply-invocation更改了this
值,因此它不再指向实例)。因此,我们必须提供原型对象的手动引用,该对象保存所需的foo
值。最合适的方法是在上面的代码中提供的方法......