OOP Javascript'这'嵌套私有方法中的关键字
OOP Javascript 'this' keyword in a nested private method
下面是一些示例代码:
ExampleClass = function()
{
this.initiate();
};
ExampleClass.prototype.initiate = function()
{
var connect = function()
{
this.sendNOP();
};
connect();
};
ExampleClass.prototype.sendNOP = function()
{
console.info('Sending NOP...');
var callback = function()
{
console.info('Server responded to NOP. ZzzZzzzZzz...');
};
setTimeout(callback, 1500);
};
我很好奇为什么我不能在ExampleClass.initiate
中调用this.sendNOP()
,以便ExampleClass.initiate._connect()
将ExampleClass
的实例作为this
传递给ExampleClass.sendNOP()
,似乎将window
作为this
传递。为什么?
编辑:
问题是,当我们调用ExampleClass.initiate._connect()
时,我们只使用不指定任何上下文的connect()
。用.apply(this)
调用ExampleClass.initiate._connect()
有效!CCD_ 13将上下文设置为CCD_。
ExampleClass.prototype.appliedInitiate = function()
{
var connect = function()
{
this.sendNOP();
};
connect.apply(this);
};
最终代码
ExampleClass = function()
{
this.appliedInitiate();
};
ExampleClass.prototype.sendNOP = function()
{
console.info('Sending NOP...');
var callback = function()
{
console.info('Server responded to NOP. ZzzZzzzZzz...');
};
setTimeout(callback, 1500);
};
ExampleClass.prototype.initiate = function()
{
var connect = function()
{
this.sendNOP();
};
connect(); // Won't work. connect() is not called from any context (ie. obj.connect() )
};
ExampleClass.prototype.appliedInitiate = function()
{
var connect = function()
{
this.sendNOP();
};
connect.apply(this); // Will work, we are calling connect with apply, which sets the context to ExampleClass
};
不能在ExampleClass.initiate
中调用this.sendNOP
。你用connect
来称呼它。对connect
的调用在initiate
函数内部是无关紧要的。
您没有使用任何上下文调用connect
,因此上下文是默认对象(window
(。
相关文章:
- 为什么dijit.form.Select有方法setStore(),而dijit.fform.FilteringSele
- JSPM-是否有方法或需要对捆绑文件进行版本化
- 当用户试图删除indexedDB数据库时,是否有方法执行函数
- Box2dWeb中是否有方法将对象的位置.x输出到console.log()
- 是否有方法在WebCrypto API中获取RSA密钥的组件
- 是否有方法可以快速确定浏览器是否支持启用了cors的图像而不会污染浏览器?
- 是否有方法以编程方式确定私钥是用DER还是PEM编码的?
- 在反序列化JSON对象时,是否有方法将属性名称转换为小写?
- 是否有方法检查特定点(X,Y)是否在SVG元素中
- 是否有方法减少相同if语句的代码
- 如何使用此关键字从方法访问类属性
- 在babel编译时是否有方法注入或忽略全局变量?
- Node.js query:是否有方法提示用户自定义大小的数组
- 在检查字符串时,是否有方法包含单词变体(过去时,动名词)
- 当元素不处于悬停状态时,是否有方法获得元素的HOVER样式?
- 在javascript中,预定义的全局变量和关键字有什么区别?
- 是否有方法检测和更改输入值格式
- 解析JSON字符串后是否有方法获得对象属性
- 检查对象是否有方法,而不实例化它
- 在附加到webRequest事件时,是否有方法访问匹配的URL模式