function New(func) { var res = {}; if(func.prototype !== null) { res.__proto__ = func.prototype; } var ret = func.apply(res, Array.prototype.slice.call(arguments,1)); if((typeof ret === 'object' || typeof ret === 'function') && ret !== null) { return ret; } return res; } var Animal = function(name,age) { this.name = name; this.age = age; } Animal.prototype.call = function() { alert('hello') } var a1 = new Animal('cat',10) var a2 = New(Animal,'cat',10)