在node.js中 User.prototype.save = function(){…} 和 User.save = function(){…} 有什么区别呢?
你可以同时写两个,然后调用的时候,是只调用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的原型链这部分知识!!