我正在尝试用javascript构建一个系统作为ruby。
例如,当我定义一个函数a时,如何调用a
(不是a()
)并获取1
?
var a = function(){
return 1;
}
console.log(a);//wanted result 1, not function(){...}
console.log(a());//it's okay.
我认为可以使用macro
,以便在运行之前,将a
检测为函数并自动更改为a()
,但我不知道,我该怎么办?做到这一点。
请帮帮我
更新:我发现了一个检测函数类型变量的函数,但我不知道如何使用它。
function isFunction(functionToCheck) {
var getType = {};
return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';
}
答案 0 :(得分:3)
您可以使用对象的get属性来实现此目的:
function getValue(str) {
return 'Hello ' + str;
}
function Person(fname, lname){
this.fname = fname;
this.lname = lname;
Object.defineProperty(this, 'fullName', {
get: function(){
return this.fname + ' ' + this.lname
}
});
Object.defineProperty(this, 'greet', {
get: function(){
return getValue(this.fullName)
}
});
}
var p = new Person('foo', 'bar');
console.log(p.greet)
答案 1 :(得分:0)
一种简单的方法是使用立即调用的函数表达式来执行此操作。您将函数括号括起来,然后在结尾添加一组()
。每当你打电话给a
时,它内部的功能都会立即触发。
var a = (function(){
return 1;
})();
console.log(a)
// will return 1