2017-03-02 6 views
-5

私はlength機能上書きしたい:ノードで実行するとオーバーライドObject.length機能

function x_funct(){ 
    this.length = function(){ 
     console.log("hello"); 
     return 8; 
    } 
}; 

var x = new x_funct(); 
console.log(x.length); 

それは[Function]を出力します。私はhelloを見ることを期待していた。

+5

なぜ許可されていませんか?あなたがそれを実行したということは、それが*可能であることを意味します。あなたが呼び出さなかった機能がなぜ呼び出されなかったのか尋ねていますか? –

+3

'x.length'は実際には関数です。あなたはその機能を呼び出すことを意味しましたか? 'x.length()' – JJJ

+1

質問を編集して、意味を説明してください。あなたは関数のソースコードを見たいと思いますか?あなたはその機能を実行すると思いますか?他に何か? –

答えて

1

.lengthは、値プロパティではなく、関数であると宣言しています。あなたは、あなたが表示されているものを、機能するのでObject.defineProperty

Object.defineProperty(this, 'length', { get: function() { return val; } }); 
0

でReadOnlyプロパティを作ることができます。

関数はJavascriptのオブジェクトなので、x.lengthを印刷しようとすると、その結果ではなく関数自体が出力されます。

結果を印刷する場合は、次のように記述する必要があります。x.length()

関連する問題