跳到主要内容
CNode

node.js中prototype的区别是什么

Yyihaodian发布于 13 年前最后回复 13 年前
19226590

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

查看回复

回复 (19)

L
lyman#113 年前

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

M
mjerry#213 年前

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

L
leizongmin#313 年前

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

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

var user = new User();
user.save();
L
lidashuang#513 年前

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

B
bairedzhang#713 年前

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

B
braveoyster#913 年前

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

Z
zaobao#1013 年前
引用 lyman你可以同时写两个,然后调用的时候,是只调用User.save 然后你 delete User.save 后 还是可以继续调用 User.save 不过其实是调用User.prototype.s...

@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()就可以。

L
lyman#1113 年前
引用 lyman你可以同时写两个,然后调用的时候,是只调用User.save 然后你 delete User.save 后 还是可以继续调用 User.save 不过其实是调用User.prototype.s...

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

H
hlqfme#1213 年前

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

M
mq1980#1313 年前

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

Z
zlming1988#1413 年前
引用 lyman你可以同时写两个,然后调用的时候,是只调用User.save 然后你 delete User.save 后 还是可以继续调用 User.save 不过其实是调用User.prototype.s...

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

E
echorenyuan#1513 年前

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

L
lyman#1613 年前
引用 lyman你可以同时写两个,然后调用的时候,是只调用User.save 然后你 delete User.save 后 还是可以继续调用 User.save 不过其实是调用User.prototype.s...

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

Z
zlming1988#1713 年前
引用 lyman你可以同时写两个,然后调用的时候,是只调用User.save 然后你 delete User.save 后 还是可以继续调用 User.save 不过其实是调用User.prototype.s...

@lyman 我刚刚测试了一下

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()

User.save是 User函数的方法,和 u 这个实例没有什么关系。

L
lkf520kyle#1913 年前

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

参与回复

登录后即可参与回复。登录