2017-03-02 101 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

因为这就是你所显示的功能。

函数是Javascript中的对象,所以如果您尝试打印x.length,则会打印函数本身,而不是打印该函数的结果。

如果你想打印结果,你应该写x.length()