CNode

node.js中prototype的区别是什么

Yyihaodian发布于13 年前最后回复13 年前19 回复22648 浏览0 收藏

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

查看回复

回复 (19)

L
lyman#1·13 年前

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

M
mjerry#2·13 年前

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

L
leizongmin#3·13 年前

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

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

var user = new User();
user.save();
L
lidashuang#5·13 年前

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

B
bairedzhang#7·13 年前

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

B
braveoyster#9·13 年前

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

Z
zaobao#10·13 年前
引用 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#11·13 年前
引用 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#12·13 年前

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

M
mq1980#13·13 年前

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

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

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

E
echorenyuan#15·13 年前

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

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

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

L
lkf520kyle#19·13 年前

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

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