lessfish / underscore-analysis

【NO LONGER UPDATE】underscore-1.8.3.js 源码解读 & 系列文章(完)
MIT License
3.96k stars 642 forks source link

带注释的源码中var _ = function (obj) {....}中有个疑问 #17

Closed zhoucumt closed 8 years ago

zhoucumt commented 8 years ago

如标题, 该函数中,也就是66行if (!(this instanceof )) return new (obj); 为什么这里不是obj instanceof _而变成了this?

lessfish commented 8 years ago

@zhoucumt 看个例子:

function Person(obj) {
  if (obj instanceof Person)
    return obj;

  if (!(this instanceof Person))
    return new Person(obj);

  this.name = obj;
}

var p = Person('hanzichi');
console.log(p);

试着把 this 改成 obj 看看, this.name = obj 这行永远也调不到

zhoucumt commented 8 years ago

@hanzichi 希望楼主能给出underscore整体上的设计原理和框架的设计思路。现在讲的都是细节的知识点,整体上没能让人很好的把握。谢谢

ahonn commented 8 years ago

@zhoucumt 其实最好的方式是自己去读一遍

lessfish commented 8 years ago

@zhoucumt

整体思路和设计原理,以及调用方式包括 OOP 等是肯定会讲的,只是我希望把它放在最后讲,个人觉得前者不影响对于细节方法的理解。甚至可以将 _ 简化下如此理解:

var _ = {};
_.each = function() {
  // ...
};