如何访问我的实例'this'从揭示原型
How do I access my instance 'this' from revealing prototype?
我想使用揭示原型模式,假设我有一个简单的对象
function Obj(name) {
this.name = name;
}
Obj.prototype = (function() {
var p1 = function() {
return p2();
};
var p2 = function() {
return this.name;
};
return {
f1: p1,
f2: p2
};
}());
我用
构造var o = new Obj('Hello');
现在o.f2()
得到Hello
而o.f1()
得到undefined
。我能够通过调用(如p2.call(this)
)传递作用域来解决这个问题,但是这对于许多函数来说变得很繁琐。理想情况下,我希望能够做一个self = this
类型的赋值,这样我就可以在代码的任何地方做self.name
。
我该怎么做?
因为JavaScript函数调用的本质就是这样,而且因为原型代码必须为它的任何"客户端"对象工作,所以很难消除上下文的显式管理(this
)。一种可能比在所有地方使用.call()
或.apply()
更好的方法是转换函数,使上下文成为显式参数。您可以使用.call()
和.bind()
:
Obj.prototype = (function() {
var p1 = function() {
return cp2(this);
};
var p2 = function() {
return this.name;
};
var cp1 = p1.call.bind(p1);
var cp2 = p2.call.bind(p2);
return {
f1: p1,
f2: p2
};
}());
这样,"cp1"answers"cp2"基本上是别名,可以用来代替对.call()
的显式引用。第一个参数是要用作上下文的值。
请注意,在原型中,不希望将任何内容绑定到this
,因为每个对象实例都不同。
相关文章:
- 混合jQuery,原型和“this”
- Javascript,从原型函数自己的字段中获取“this”
- “this”在不是类原型的函数中
- 在原型中声明 TypeScript 成员,而不是添加到“this”中
- 从原型中的事件访问“this”
- 通过引用调用原型函数时,类会丢失“this”作用域
- 原型方法中的“this”在继承时未按预期解析
- Javascript原型和访问“this”的父对象
- 使用从 async.series 调用的原型函数中的“this”
- 我可以用javascript提供我/the/self=this的原型定义吗
- 传递一个原型's函数作为参数而不丢失'this'上下文
- 什么是原型,$.扩展,并返回this"不得不这么做
- this.collection.reset引发错误-未捕获类型错误:无法读取属性'原型'的未定义
- JavaScript数组.原型如何设置'this'到由方法获得的新数组
- 引用“this"在对象原型方法中的setInterval/setTimeout
- 如何访问我的实例'this'从揭示原型
- Javascript传递"this"从原型到另一个函数
- 什么是'this'当它在原型中时引用
- 设置“this"到实例,在创建原型函数期间的回调集中
- “this"原型内部是未定义的