1
bolasblack 2014-05-07 08:44:35 +08:00 1
prototype 里的方法只有构造函数的实例可以使用
不过你也可以这么干 `User.prototype.save.call(userInstance, callback)` |
2
zhujinliang 2014-05-07 09:14:43 +08:00 1
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 1
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讲得比较透彻。 |