如何自动检测函数并返回值

时间:2017-10-13 11:07:17

标签: javascript ruby function

我正在尝试用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]';
}

2 个答案:

答案 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