极乐门资源网 Design By www.ioogu.com
我们知道,给JavaScript类添加原形(prototype)方法是很简单的。而且常用的有下面这两种方法,可是这两种方法在使用时有区别吗?
JScript Class:
复制代码 代码如下:
function JSClass()
{
}
Extends prototype method:
复制代码 代码如下:
JSClass.prototype.MethodA = function()
{
};
Or
复制代码 代码如下:
function = JSClass.prototype.MethodA()
{
};
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
我先来说一个简单的区别:这两个方法导入的原型方法,第一个是一个匿名方法;第二个方法有方法名"JSClass.prototype.MethodA"。
2005-03-01 10:52 | birdshome
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
<BODY>
<script>
function JSClass()
{
}
function = JSClass.prototype.MethodA()
{
};
</script>
</BODY>
提示出错乜。
2005-03-01 13:51 | 阮
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
faint,我发现FreeTextBox修改少量数据(一两个字符)提交有时会没有效果:(
我那个是手误多写了个"=",可是我记得我修改过了的。
2005-03-01 14:00 | birdshome
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
其实这两个原形定义方式可以简化一下来讨论,先把它们看作是两个函数,如下:
Foo1();
function Foo1()
{
alert('This is Foo1.');
}
和 Foo2();
var Foo2 = function()
{
alert('This is Foo2.');
}
运行第一个显然是不会有任何错误的,可是运行第二个就有问题了,这时系统会说:Microsoft JScript runtime error: Object expected。这就是说函数定义(Foo1)在脚本解析器中有最高的初始化优先级,这个很好理解。如果不优先处理函数,那么对于函数中的函数调用就没有办法处理了,假使我们先定fn1()再定义fn2(),却从fn1中调fn2,那么就通不过解析了。为什么Foo2不能被初始化,Foo2的定义根本不是函数定义,它是一个标准的赋值语句,之所以能象标准函数一样的使用Foo2(Foo2()),完全是因为它指向的是一个函数对象的实例而已。
2005-03-03 22:17 | birdshome
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
再来看原形方法导入里的两种方式,就很简单了。并且不同的执行优先循序,也决了它们在使用中的不同,看如下示例:
<script language="javascript">
function NormalClass()
{
this.m_Property1 = 'P1 in Normal Class.';
this.m_Property2 = 'P2 in Normal Class.';
this.toString = function()
{
return '[class NormalClass]';
}
return new InnerClass();
function InnerClass()
{
this.m_Property1 = 'P1 in Inner Class.';
this.m_Property2 = 'P2 in Inner Class.';
this.toString = function()
{
return '[class InnerClass]';
}
}
InnerClass.prototype.Method1 = function()
{
alert(this.m_Property1);
};
function InnerClass.prototype.Method2()
{
alert(this.m_Property2);
};
}
</script>
执行:
var nc = new NormalClass();
nc.Method1();
nc.Method2();
是什么效果?为什么?
2005-03-03 22:21 | birdshome
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
最后结果居然是nc.Method1()没有定义,nc.Method2()运行正常。
其实不奇怪了,InnerClass.prototype.Method1 = function()依赖于赋值语句的执行,而 function InnerClass.prototype.Method2() 以最高优先级被脚本引擎初始化。
2005-03-05 02:43 | birdshome
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
我在Antechinus JavaScript Editor测试你的代码在:
function InnerClass.prototype.Method2()报错,
SyntaxError:missing( before formal parameters See: .prototype.Method2(
2005-05-10 17:11 | Error
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
@Error
用IE来试过吗?
2005-05-10 17:30 | birdshome
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
我用FF也是一样的报错: missing( before formal parameters See: .prototype.Method2(
2006-08-19 22:40 | jzz
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
return new InnerClass(); 把这行移到
function InnerClass.prototype.Method2()
{
alert(this.m_Property2);
};
后面ie执行正常.FF报错: missing( before formal parameters See: .prototype.Method2(
ie是安顺序执行下来的,而NS系列不是!
FF在执行到function InnerClass.prototype.Method2() 这个的时候它根本不知道有这个InnerClass类,自然就不能无缘无故的来个prototype.xxx的东东
2006-11-13 00:57 | Doutu
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
@Doutu
把return new InnerClass();放到function InnerClass.prototype.Method2()这个方法之后,就完全违背了我编写这个示例的初衷。这个示例恰好说明了,IE对function foo()这种函数定义格式有较高的解析优先级,而foo = function()只是一个普通的赋值语句。至于ff中的情况我没有研究过,既然你说ff找不到return后的InnerClass,那么就说明是顺序的解析function foo()这种还属定义格式的。
2006-11-13 01:29 | birdshome
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
唉。可怜的只会用ie的人呀。 function x.y.z() {} 的写法根本就是不标准的写法,只有ie支持,其他js引擎中如ff或opera都会报错。符合标准的写法只有 x.y.z = function () {};
当然,就语法层面来说,我挺喜欢这种写法的,希望以后的标准能采纳这种写法。
2006-11-28 11:04 | hax
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
呵呵 hax说得对啊。 只有ie才会像妈妈一样包容孩子的各种错误
标准的写法只有 x.y.z = function () {};
其实,ie还支持更诡异的写法。
看看这个
function window::onload(){
alert("go_rush")
}
2006-11-28 14:39 | Go_Rush
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
@hax
标准再好,也是为人服务的,争论这个是学院派和工程派之间的事情,我们实现好我们自己系统就可以了,何必过分在神仙打架。
// 你的评论其实挺好的。Sigh,只可惜因为IE,我好可怜啊~~~
JScript Class:
复制代码 代码如下:
function JSClass()
{
}
Extends prototype method:
复制代码 代码如下:
JSClass.prototype.MethodA = function()
{
};
Or
复制代码 代码如下:
function = JSClass.prototype.MethodA()
{
};
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
我先来说一个简单的区别:这两个方法导入的原型方法,第一个是一个匿名方法;第二个方法有方法名"JSClass.prototype.MethodA"。
2005-03-01 10:52 | birdshome
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
<BODY>
<script>
function JSClass()
{
}
function = JSClass.prototype.MethodA()
{
};
</script>
</BODY>
提示出错乜。
2005-03-01 13:51 | 阮
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
faint,我发现FreeTextBox修改少量数据(一两个字符)提交有时会没有效果:(
我那个是手误多写了个"=",可是我记得我修改过了的。
2005-03-01 14:00 | birdshome
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
其实这两个原形定义方式可以简化一下来讨论,先把它们看作是两个函数,如下:
Foo1();
function Foo1()
{
alert('This is Foo1.');
}
和 Foo2();
var Foo2 = function()
{
alert('This is Foo2.');
}
运行第一个显然是不会有任何错误的,可是运行第二个就有问题了,这时系统会说:Microsoft JScript runtime error: Object expected。这就是说函数定义(Foo1)在脚本解析器中有最高的初始化优先级,这个很好理解。如果不优先处理函数,那么对于函数中的函数调用就没有办法处理了,假使我们先定fn1()再定义fn2(),却从fn1中调fn2,那么就通不过解析了。为什么Foo2不能被初始化,Foo2的定义根本不是函数定义,它是一个标准的赋值语句,之所以能象标准函数一样的使用Foo2(Foo2()),完全是因为它指向的是一个函数对象的实例而已。
2005-03-03 22:17 | birdshome
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
再来看原形方法导入里的两种方式,就很简单了。并且不同的执行优先循序,也决了它们在使用中的不同,看如下示例:
<script language="javascript">
function NormalClass()
{
this.m_Property1 = 'P1 in Normal Class.';
this.m_Property2 = 'P2 in Normal Class.';
this.toString = function()
{
return '[class NormalClass]';
}
return new InnerClass();
function InnerClass()
{
this.m_Property1 = 'P1 in Inner Class.';
this.m_Property2 = 'P2 in Inner Class.';
this.toString = function()
{
return '[class InnerClass]';
}
}
InnerClass.prototype.Method1 = function()
{
alert(this.m_Property1);
};
function InnerClass.prototype.Method2()
{
alert(this.m_Property2);
};
}
</script>
执行:
var nc = new NormalClass();
nc.Method1();
nc.Method2();
是什么效果?为什么?
2005-03-03 22:21 | birdshome
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
最后结果居然是nc.Method1()没有定义,nc.Method2()运行正常。
其实不奇怪了,InnerClass.prototype.Method1 = function()依赖于赋值语句的执行,而 function InnerClass.prototype.Method2() 以最高优先级被脚本引擎初始化。
2005-03-05 02:43 | birdshome
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
我在Antechinus JavaScript Editor测试你的代码在:
function InnerClass.prototype.Method2()报错,
SyntaxError:missing( before formal parameters See: .prototype.Method2(
2005-05-10 17:11 | Error
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
@Error
用IE来试过吗?
2005-05-10 17:30 | birdshome
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
我用FF也是一样的报错: missing( before formal parameters See: .prototype.Method2(
2006-08-19 22:40 | jzz
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
return new InnerClass(); 把这行移到
function InnerClass.prototype.Method2()
{
alert(this.m_Property2);
};
后面ie执行正常.FF报错: missing( before formal parameters See: .prototype.Method2(
ie是安顺序执行下来的,而NS系列不是!
FF在执行到function InnerClass.prototype.Method2() 这个的时候它根本不知道有这个InnerClass类,自然就不能无缘无故的来个prototype.xxx的东东
2006-11-13 00:57 | Doutu
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
@Doutu
把return new InnerClass();放到function InnerClass.prototype.Method2()这个方法之后,就完全违背了我编写这个示例的初衷。这个示例恰好说明了,IE对function foo()这种函数定义格式有较高的解析优先级,而foo = function()只是一个普通的赋值语句。至于ff中的情况我没有研究过,既然你说ff找不到return后的InnerClass,那么就说明是顺序的解析function foo()这种还属定义格式的。
2006-11-13 01:29 | birdshome
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
唉。可怜的只会用ie的人呀。 function x.y.z() {} 的写法根本就是不标准的写法,只有ie支持,其他js引擎中如ff或opera都会报错。符合标准的写法只有 x.y.z = function () {};
当然,就语法层面来说,我挺喜欢这种写法的,希望以后的标准能采纳这种写法。
2006-11-28 11:04 | hax
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
呵呵 hax说得对啊。 只有ie才会像妈妈一样包容孩子的各种错误
标准的写法只有 x.y.z = function () {};
其实,ie还支持更诡异的写法。
看看这个
function window::onload(){
alert("go_rush")
}
2006-11-28 14:39 | Go_Rush
# re: JS类定义原型方法的两种实现的区别 回复 更多评论
@hax
标准再好,也是为人服务的,争论这个是学院派和工程派之间的事情,我们实现好我们自己系统就可以了,何必过分在神仙打架。
// 你的评论其实挺好的。Sigh,只可惜因为IE,我好可怜啊~~~
极乐门资源网 Design By www.ioogu.com
极乐门资源网
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
极乐门资源网 Design By www.ioogu.com
暂无JS类定义原型方法的两种实现的区别评论很多的评论...
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新日志
2025年01月23日
2025年01月23日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]