怎样用 JS 自身实现一遍 new ?
 发布于 13 年前  作者 jiyinyiyong  7199 次预览  最后一次回复是 13 年前  来自  

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

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

… 这不科学…

leizongmin

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

jiyinyiyong

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

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

想学会折腾原型链

saber

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

return o; }

saber

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

jiyinyiyong

@saber 代码记得要高亮啊…

xx.__proto__
island205
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()