
1 bolasblack 2014-05-07 08:44:35 +08:00 prototype 里的方法只有构造函数的实例可以使用 不过你也可以这么干 `User.prototype.save.call(userInstance, callback)` |
2 zhujinliang 2014-05-07 09:14:43 +08:00 User.prototype.save 可以理解为 class User { public function save() } User.get 可以理解为 class User { public static function get(); } |
3 jsonline 2014-05-07 09:18:30 +08:00 via Android prototype 是为了方便继承。 一个是成员方法,一个是类方法 |
4 isayme 2014-05-07 11:39:17 +08:00 JS菜鸟, 最近貌似看到类似问题: User.prototype.save 需要new出来的实例才可以调用; 所有的new出来的实例共享这个函数(同一个函数实例). User.get 可以直接调用; 每个new出来的实例都初始化一次个函数(函数实例不同), 所以占用内存多点... 如有纰漏, 坐等大神指正... |
5 chcone 2014-05-08 00:42:42 +08:00 @isayme User的实例是没有get函数的,get函数没有在User构造体里定义,就像下面这样: function User(...) { ... this.get = function () {}; ... } 而User.get只是User对象里的一个函数而已。 |
6 lijsh 2014-05-08 15:02:55 +08:00 @isayme 第一句没问题,包括保存、删除和更新这些操作都是针对一个特定的实例的,是实例上的方法,所以通过原型共享这些方法; 至于User.get,注意这个get方法是挂在User这个构造函数上的,和new出来的实例没关系,是为了针对User类而定义出来的;类似的,你可以把获取用户总数的方法也挂在User上,这些方法只与整个类有关,与实例无关。 |
7 isayme 2014-05-20 14:24:02 +08:00 |
8 lijsh 2014-05-20 15:27:28 +08:00 @isayme 我先说第三行吧,instanceof可以用作判断实例与构造函数的关系,如果inst是ctor的实例,即inst继承自ctor.prototype,则inst instanceof ctor返回true;但这一行里你判断的却是原型(而不是实例)和构造函数的关系,自然是返回false了。 第一行涉及到Function这个内置构造函数,它是函数对象的构造函数(就像String是字符串的构造函数),但它自己也是函数对象,所以它的构造函数就是自己,即它自己是自己的实例(Function.cOnstructor=== Function;及Function instanceof Function均返回true);既然现在实例和构造函数相等,而一般来说构造函数的prototype属性和实例的__proto__属性也相等,于是就有Function.prototype === Function.__proto__; 第二行是想问Function.prototype为什么是函数对象吗?我也不知道,不过在调试台看到它是一个名为Empty的函数,继承自Object.prototype。 推荐一篇文章http://www.360weboy.com/front/prototype/,关于Function.prototype讲得比较透彻。 |