怎样用 JS 自身实现一遍 new ?
发布于 12 年前 作者 jiyinyiyong 6324 次浏览 最后一次编辑是 8 年前

比如一个函数, generate() , 使得下面两个表达式意义相同:

b = new a;
b = generate(a);
14 回复
function generate (fn) {
  return new fn;
}

… 这不科学…

这个问题本来就是闲得蛋疼才想出来的

@leizongmin 昨天看 JS 的原型链看得烦来… 我就觉得明明好东西, 直接接口做明显一点不就好了, 搞这么复杂

function generate = (ctor, args){
  var o = clone(ctor.prototype)
  ctor.apply(o, args)
}
clone.toString() == ?

想学会折腾原型链

function generate (ctor){ var o = {}; ctor.call(o); ctor.proto = ctor.prototype;

return o; }

好像 下划线被过滤掉了 --proto–

@saber 代码记得要高亮啊…

xx.__proto__
generate = (ctor, arg...)->
    o = {}
    o.__proto__ = ctor.prototype
    ctor.apply o, arg
    o

class Dog
    constructor:(@name)->
    eat:->
        console.log "#{@name} is eatting" 

generate(Dog, "dogg").eat()
回到顶部