node.js中prototype的区别是什么
发布于 11 年前 作者 yihaodian 21201 次浏览 最后一次编辑是 8 年前

在node.js中 User.prototype.save = function(){…} 和 User.save = function(){…} 有什么区别呢?

19 回复

你可以同时写两个,然后调用的时候,是只调用User.save 然后你 delete User.save 后 还是可以继续调用 User.save 不过其实是调用User.prototype.save的。

这和node没关系吧 只要是js都是这样子?

User.save = function(){......} 是这样调用的:User.save()

User.prototype.save = function(){.......} 是这样调用的:

var user = new User();
user.save();

User.prototype.save = function(){…} 是实例方法 User.save = function(){…} 是类方法

delete之后就不能调了吧

这是js的原型机制,两个不是一个概念,建议楼主还是先好好学学js吧

@zaobao 可以的,这个就是这个prototype的作用的。

静态方法和实例方法。。。基础的东西

@lyman prototype和User是两个域,只有User实例化时,prototype中的成员对象才会挂到实例化后的对象中。直接调原型对象下的save会报错的。

var User = function () {};
User.prototype.save = function () {
                        console.log('This is User.prototype.save')
                      };
User.save = function () {console.log('This is User.save')};
delete User.save;
User.save();

这样是不行的,如果调User.prototype.save()就可以。

@zaobao 噢,谢谢指正~~ 确实是在User被new以后才能delete User.save后才能再调用 即: var u = new User(); u.save(); //调用User.save() delete u.save; //删除User.save u.save(); //调用User.prototype.save

lz可以先把js好好看看。。。 @lidashuang 的解释已经哦了,再想理解深入的话,可以看前面的pdf

javascript的原型继承,User的子类会继承User的protype方法,类似于JAVA或C++的继承。《JAVAScript语言精粹》有个讲解可以参考。

@lyman 是吗?为什么我觉得即使没有delete u.save;也一样是调用User.prototype.save呢,变量u没有User.save()吧,会继承原型里的.save方法吧

这个不是javascript里面的基础知识吧!

@zlming1988 嘿嘿,我那个代码我有实际测试的,确实是的。你可以立马写个代码在chrome的console里测试下~~

@lyman 我刚刚测试了一下 <pre>var User = function (){}; User.prototype.save = function () { console.log(‘This is User.prototype.save’) }; User.save = function () {console.log(‘This is User.save’)}; var u = new User(); u.save(); //调用User.prototype.save() delete User.save; //删除User.save u.save();//调用的依然是User.prototype.save() </pre> User.save是 User函数的方法,和 u 这个实例没有什么关系。

@zlming1988 噢。。确实是。~~

建议好好看看javascript的原型链这部分知识!!

回到顶部