我将var strVal = $.trim($('.txtValue').val());
var lastChar = strVal.slice(-1);
if (lastChar == ',') {
strVal = strVal.slice(0, -1);
}
属性附加到services
:
this
然后将方法附加到function Client(){
this.services = {
'propertyName' : {}
};
,我需要在其中引用this
实例的services
属性:
client
但function Client(){
this.services = {
'propertyName' : {}
};
this.someMethod = function () {
if (this.services['propertyName']) {
//do something
}
}
}
var clientName = new Client();
未定义。如何在分配给this.services - line 6
的方法中使用分配给this
的属性?似乎应该是可能的,因为在构造函数调用该方法时,对象将存在this
属性。这是语言限制吗?可能吗?应该是吗?
答案 0 :(得分:2)
但是this.services - 第6行未定义。
这完全取决于你如何调用 someMethod
。如果你这样称呼它:
clientName.someMethod();
...一切都会好的,因为调用中的this
将是new Client
创建的services
属性的对象。但是在JavaScript中,this
不是具有普通函数的固定事物,而是由设置函数的方式设置。所以:
var f = clientName.someMethod;
f();
...会失败,因为this
不会是你期望的对象。 (ES6的新“箭头”功能不是这样,它从定义它们的位置得到this
,而不是它们被调用的方式。)
当函数用作回调函数时,您通常会看到这一点:
doSomething(clientName.someMethod);
...因为doSomething
不知道将哪个对象用作this
。
您可以使用Function#bind
:
doSomething(clientName.someMethod.bind(clientName));
或类似地:
var f = clientName.someMethod.bind(clientName);
f();
Function#bind
创建一个新函数,在调用时,将调用原始函数,并将this
设置为您提供的参数。
只是为了充实我上面的ES6评论:在ES6中,如果你有:
function Client(){
this.services = {
'propertyName' : {}
};
this.someMethod = () => { // <== ES6 "arrow" function
if (this.services['propertyName']) {
//do something
}
}
}
...如何调用someMethod
,this
将是创建的功能。五,方便。 : - )