这是Javascript Prototype属性的预期行为吗?

时间:2011-04-02 12:03:09

标签: javascript functional-programming

function math() { return 'x' } 

math.prototype.sqrt = function(a){return Math.sqrt(a)} 

var x = new math(); 
x.sqrt(9); //gives 3

function math1() { return {} } 

math1.prototype.sqrt = function(a){return Math.sqrt(a)} 

var y = new math1(); 
y.sqrt(9); //throws javascript error "TypeError: Object #<Object> has no method 'sqrt'"

1 个答案:

答案 0 :(得分:4)

通常,从构造函数返回值无法实现。似乎如果返回一个JavaScript原语(如数字或字符串),则newvar y = new math1();)的对象实例化过程将按预期工作,忽略此值。

但是,如果您返回{}之类的JavaScript对象,则new的实例化过程似乎无法以相同的方式工作。而是使用返回的对象加载变量y,而不是使用新的math1实例。