Javascript 私有方法专用调用者 returns 未定义
Javascript private method dedicated caller returns undefined
我正在尝试定义一个方法 _
以便我可以调用我的原型中定义的私有方法,例如 http://webreflection.blogspot.hk/2008/04/natural-javascript-private-methods.html
我的功能比较大,这里就挑一个案例吧
XXXXX.prototype = (function(){
var privateMethod =function() {
return "success";
}
//public method here
return { //returns a prototyp
constructor: XXXXX,
pubMethod: function() {
console.log("normal call",privateMethod.apply(this));//success
console.log("_ call",this._(privateMethod)());//undefined
},
//private method dedicated caller
_: function(fun) {
var that = this;
return function() {
fun.apply(that, arguments);
}
}
};
})()
问题:
为什么我的 _
没有按预期工作?我哪里错了?
您忘记在 fun.apply
上添加 return
function XXXXX(){}
XXXXX.prototype = (function(){
var buildDimWhere =function() { return this.subject; }
return {
constructor: XXXXX,
pubMethod: function() {
console.log(buildDimWhere.apply(this))
console.log(this._(buildDimWhere)())
},
_: function(fun) {
var that = this;
return function() {
return fun.apply(that, arguments); // <--- HERE!
}
}
};
})()
// test code:
y = new XXXXX();
y.subject = '123'
y.pubMethod();
没有 return
它给出:
{ subject: '123' }
123
{ subject: '123' }
undefined
添加return
后(见<-- HERE!
部分),输出:
{ subject: '123' }
123
{ subject: '123' }
123
我正在尝试定义一个方法 _
以便我可以调用我的原型中定义的私有方法,例如 http://webreflection.blogspot.hk/2008/04/natural-javascript-private-methods.html
我的功能比较大,这里就挑一个案例吧
XXXXX.prototype = (function(){
var privateMethod =function() {
return "success";
}
//public method here
return { //returns a prototyp
constructor: XXXXX,
pubMethod: function() {
console.log("normal call",privateMethod.apply(this));//success
console.log("_ call",this._(privateMethod)());//undefined
},
//private method dedicated caller
_: function(fun) {
var that = this;
return function() {
fun.apply(that, arguments);
}
}
};
})()
问题:
为什么我的 _
没有按预期工作?我哪里错了?
您忘记在 fun.apply
return
function XXXXX(){}
XXXXX.prototype = (function(){
var buildDimWhere =function() { return this.subject; }
return {
constructor: XXXXX,
pubMethod: function() {
console.log(buildDimWhere.apply(this))
console.log(this._(buildDimWhere)())
},
_: function(fun) {
var that = this;
return function() {
return fun.apply(that, arguments); // <--- HERE!
}
}
};
})()
// test code:
y = new XXXXX();
y.subject = '123'
y.pubMethod();
没有 return
它给出:
{ subject: '123' }
123
{ subject: '123' }
undefined
添加return
后(见<-- HERE!
部分),输出:
{ subject: '123' }
123
{ subject: '123' }
123