prototype ...

zsyok 2010-11-27 12:48:09

function ok()
{

}
function init()
{
ok1= new ok()
ok1.f1=function(){alert(123)}
ok.prototype.f1=function(){alert(321)}
ok1.f1();
//大家看,这里创建的两个f1方法.有什么不一样的?
}
window.onload=init;


...全文
51 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
hch126163 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lingxuch 的回复:]

ok1.f1=function(){alert(123)}
它是为ok1加一个属性fl,这个f1只是ok1这个对像有
ok.prototype.f1=function(){alert(321)}
这句话话是为类的原型对象加的属性,不理解啥是原型对象没关系,关键是理解这样做有什么用,如果这句话执行了,那么用ok创建的所有对象都可以访问到f1这个属性。

还要多一句嘴,对于javascri……
[/Quote]

说得清晰
lingxuch 2010-11-27
  • 打赏
  • 举报
回复
ok1.f1=function(){alert(123)}
它是为ok1加一个属性fl,这个f1只是ok1这个对像有
ok.prototype.f1=function(){alert(321)}
这句话话是为类的原型对象加的属性,不理解啥是原型对象没关系,关键是理解这样做有什么用,如果这句话执行了,那么用ok创建的所有对象都可以访问到f1这个属性。

还要多一句嘴,对于javascript,当你访问对象的属性时,他会先在对象里面找是不是有这个属性,如果有,那么这会使用这个属性,如果没有,就会去在对象对应类的原型对象上去找,正因为这样,楼主这个程序最终会执行alert(123),如果你再创建一个对象ok2,调用ok2.f1()的话,这回会执行alert(321)

简单的话,你可以把propotype对象理解成java里的静态属性,所有对象共用这个属性,但这还不够,就像java里可以重写方法一样,你还可以为对象添加属性去重写原型对象的属性,但这种重写只对当前对象有效。
hookee 2010-11-27
  • 打赏
  • 举报
回复
ok1.f1是针对ok类的具体实例定义的方法,仅作用于该实例。ok.f1是在类中定义的方法,作用于其所有实例。


function ok()
{

}
function init()
{
ok1= new ok()
ok1.f1=function(){alert(123)}
ok.prototype.f1=function(){alert(321)}
ok1.f1();
ok2 = new ok();
ok2.f1();
}

87,910

社区成员

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

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