两种js定义函数的方法有什么不同呢?

xuexiaodong2009
博客专家认证
2014-06-09 02:04:25

ListCommon2.First=function(first)
{
alert("111first do"+first);
}
ListCommon2.prototype.First=function(first)
{
alert("111first do"+first);
}



一直在使用这种方式ListCommon2.First定义函数,但网上都是ListCommon2.prototype.First这种定义方式,到底有什么不一样呢?
...全文
443 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangbai333 2014-06-10
  • 打赏
  • 举报
回复

var a = function() {}
a.b=function() {
    alert(1);
}
a.b(); //1
A = new a;
A.b() //报错,因为a的实例中没有方法b

var a = function() {}
a.b=function() {
    alert(1);
}
a.prototype.c=function(){
    alert(2);
}
a.b(); //1
A = new a;
A.b() //报错,因为a的实例中没有方法b
A.c() //2
简单说就是属性挂到对象原形上可以继承!
zhjdg 2014-06-10
  • 打赏
  • 举报
回复
人气来了。
xuexiaodong2009 2014-06-10
  • 打赏
  • 举报
回复
看来csdn越来越美人气了y
shizhongbugouzl 2014-06-10
  • 打赏
  • 举报
回复
难道你们基本都是这样定义函数的? 为毛我直接是用 function a (){} 或者 var a = function(){}
猿敲月下码 2014-06-10
  • 打赏
  • 举报
回复
从面相对象来说第一种方法是一个类的静态方法,可以直接通过类名.方法名访问 第二种是类里面定义的方法,非静态的,需要通过实例化成对象才能访问 class ListCommon2{ public static void ff(){}; } ListCommon2.ff(); class ListCommon2{ public void ff(){}; } new ListCommon2().ff();
  • 打赏
  • 举报
回复
如果你能从动态语言的角度来考虑这个问题,也许会更容易理解一点,例如php,asp.net,java js中既然没有类的概念,又是怎样来模拟类,以及面向对象的特性之一:继承
schyu1314 2014-06-09
  • 打赏
  • 举报
回复
prototype称为原型对象,它返回对象类型原型的引用 能够让你定义的类可以被继承,可被扩展 参考: http://www.cnblogs.com/yjf512/archive/2011/06/03/2071914.html
别闹腰不好 2014-06-09
  • 打赏
  • 举报
回复
第一种只能是当前对象实例才有该方法, 第二种 每个对象的实例都有该方法
xuzuning 2014-06-09
  • 打赏
  • 举报
回复
ListCommon2.First 则 First 只对当前的 ListCommon2 有效 ListCommon2.prototype.First 是对原型的设置,Firs 对所有基于 ListCommon2 的对象有效
bbjbepzz 2014-06-09
  • 打赏
  • 举报
回复
ListCommon2.First 静态方法,调用方式:ListCommon2.First() ListCommon2.prototype.First 实例方法,调用方式:new ListCommon2().First()
Go 旅城通票 2014-06-09
  • 打赏
  • 举报
回复
ListCommon2.First这个相当于OO语言的静态方法 ListCommon2.prototype.First这个则是类的方法 ListCommon2.prototype.First需要new一个实例出来才能调用First,ListCommon2.First则可以直接调用
lawine9 2014-06-09
  • 打赏
  • 举报
回复
我来说一个区别 如有以下function:
function A(){
this.first=function(){
alert('first');
}
}
可以通过:
var a=new A()
a.test();//来调用test方法
接下来,lz的问题:

A.foo=function(){
alert('foo');
}

a.foo();//报错:木有定义
但是A.foo();没问题。这里对A增加了一个静态方法。
如果是对prototype进行调教:

A.prototype.ppp=function(){
alert('ppp');
};
A.ppp();//出错
a.ppp();//正常
到这里有没有了解一些这两个的区别?
xuexiaodong2009 2014-06-09
  • 打赏
  • 举报
回复
没牛人指点啊

87,922

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧