2017-10-13 9 views
0

私はRubyとしてjavascriptでシステムを構築しようとしています。例えば関数を自動的に検出して値を返す方法

私は、関数aを定義するとき、どのように(ないa()aを呼び出し、1を得ることができますか?

var a = function(){ 
    return 1; 
} 
console.log(a);//wanted result 1, not function(){...} 
console.log(a());//it's okay. 

私はそれが走っ前に、関数としてaを検出するようにmacroを使用可能にし、自動的にa()に変更することができると思います、しかし、私は、私はそれを行うことができますどのように任意のアイデアを、持っていません。 私を助けてください。
更新:関数型変数を検出する関数が見つかりましたが、どのように使用できるかわかりません。一つの簡単な方法はこれを行うにはすぐに呼び出される関数の式を用いることであろう

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)

+0

"システムをルビーとしてjavascriptで"とは何を意味するのか不明です。 – sawa

+0

私は1を得るために 'a'ではなく' a'を使いたい、@ Rajeshの答えは同じです –

+0

なぜこれをしたいですか?言語を変更したいと思うようです。 –

答えて

3

。関数のかっこをラップし、最後に()のセットを追加します。 aに電話をかけると、すぐにその機能が発火します。

var a = (function(){ 
return 1; 
})(); 
console.log(a) 
// will return 1 
+0

素晴らしい!私はあなたから本当にエキサイティングなものを見つけました。 –

+0

これらの値(* 'greet'、' fullName' *)にはセッターがあるので、 'p.fullName = 'bla''は何もしません。これを使用して不変性を達成することもできます。 – Rajesh

+0

本当にありがとう。 –

0

:あなたはこれを達成するために、オブジェクトの取得プロパティを使用することができます

function isFunction(functionToCheck) { 
var getType = {}; 
return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; 
} 
+0

あなたの努力のおかげで、 'console.log(a)'は1を返しますが、 'console.log(a))'は何を返しますか? –

+0

申し訳ありませんが、あなたがしようとしていたことを誤解しているはずです。私は 'a 'の代わりに' a'を呼びたいと思っていました。私の例では、aは関数ではなく、内部iifeが返す値にすぎません。 –

+0

私はaと、両方に可能なことを試みています –

関連する問題