位置: 编程技术 - 正文

JS类定义原型方法的两种实现的区别评论很多(js 原型方法)

编辑:rootadmin
我们知道,给JavaScript类添加原形(prototype)方法是很简单的。而且常用的有下面这两种方法,可是这两种方法在使用时有区别吗? JScript Class: Extends prototype method: Or # re: JS类定义原型方法的两种实现的区别 回复 更多评论 我先来说一个简单的区别:这两个方法导入的原型方法,第一个是一个匿名方法;第二个方法有方法名"JSClass.prototype.MethodA"。 -- : | birdshome # re: JS类定义原型方法的两种实现的区别 回复 更多评论 <BODY> <script> function JSClass() { } function = JSClass.prototype.MethodA() { }; </script> </BODY> 提示出错乜。 -- : | 阮 # re: JS类定义原型方法的两种实现的区别 回复 更多评论 faint,我发现FreeTextBox修改少量数据(一两个字符)提交有时会没有效果:( 我那个是手误多写了个"=",可是我记得我修改过了的。 -- : | 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()),完全是因为它指向的是一个函数对象的实例而已。 -- : | 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(); 是什么效果?为什么? -- : | birdshome # re: JS类定义原型方法的两种实现的区别 回复 更多评论 最后结果居然是nc.Method1()没有定义,nc.Method2()运行正常。 其实不奇怪了,InnerClass.prototype.Method1 = function()依赖于赋值语句的执行,而 function InnerClass.prototype.Method2() 以最高优先级被脚本引擎初始化。 -- : | birdshome # re: JS类定义原型方法的两种实现的区别 回复 更多评论 我在Antechinus JavaScript Editor测试你的代码在: function InnerClass.prototype.Method2()报错, SyntaxError:missing( before formal parameters See: .prototype.Method2( -- : | Error # re: JS类定义原型方法的两种实现的区别 回复 更多评论 @Error 用IE来试过吗? -- : | birdshome # re: JS类定义原型方法的两种实现的区别 回复 更多评论 我用FF也是一样的报错: missing( before formal parameters See: .prototype.Method2( -- : | 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的东东 -- : | Doutu # re: JS类定义原型方法的两种实现的区别 回复 更多评论 @Doutu 把return new InnerClass();放到function InnerClass.prototype.Method2()这个方法之后,就完全违背了我编写这个示例的初衷。这个示例恰好说明了,IE对function foo()这种函数定义格式有较高的解析优先级,而foo = function()只是一个普通的赋值语句。至于ff中的情况我没有研究过,既然你说ff找不到return后的InnerClass,那么就说明是顺序的解析function foo()这种还属定义格式的。 -- : | birdshome # re: JS类定义原型方法的两种实现的区别 回复 更多评论 唉。可怜的只会用ie的人呀。 function x.y.z() {} 的写法根本就是不标准的写法,只有ie支持,其他js引擎中如ff或opera都会报错。符合标准的写法只有 x.y.z = function () {}; 当然,就语法层面来说,我挺喜欢这种写法的,希望以后的标准能采纳这种写法。 -- : | hax # re: JS类定义原型方法的两种实现的区别 回复 更多评论 呵呵 hax说得对啊。 只有ie才会像妈妈一样包容孩子的各种错误 标准的写法只有 x.y.z = function () {}; 其实,ie还支持更诡异的写法。 看看这个 function window::onload(){ alert("go_rush") } -- : | Go_Rush # re: JS类定义原型方法的两种实现的区别 回复 更多评论 @hax 标准再好,也是为人服务的,争论这个是学院派和工程派之间的事情,我们实现好我们自己系统就可以了,何必过分在神仙打架。 // 你的评论其实挺好的。Sigh,只可惜因为IE,我好可怜啊~~~

推荐整理分享JS类定义原型方法的两种实现的区别评论很多(js 原型方法),希望有所帮助,仅作参考,欢迎阅读内容。

JS类定义原型方法的两种实现的区别评论很多(js 原型方法)

文章相关热门搜索词:js定义类的三种方法,js 原型方法,js类定义的方法有哪些,js 原型方法,js的原型对象,js 原型方法,js 原型方法,js 定义类,内容如对您有帮助,希望把文章链接给更多的朋友!

一实用的实现table排序的Javascript类库 一个Javascript的类库,用于table内容排序。使用很方便,不用每次都去调用数据库了。特别适合多表查询的排序。加上tbody的style.display切换,也可以实现

js类后台管理菜单类-MenuSwitch 写MenuSwitch类的出发点是因为随着后台管理项越来越多,从而导致菜单显示部出现了滚动条导致页面很不美观,自己蒙生写这个JS类了。这个功能类采用

js定义对象简单学习例子 无标题页[Ctrl+A全选注:如需引入外部Js需刷新才能执行]

标签: js 原型方法

本文链接地址:https://www.jiuchutong.com/biancheng/385666.html 转载请保留说明!

上一篇:js类中获取外部函数名的方法与代码(外部js获取当前vue实例)

下一篇:js类后台管理菜单类-MenuSwitch(js写后端用什么框架)

  • 公司每年网络费计入什么会计科目
  • 小规模纳税季收入怎么算
  • 银行转账支付凭证有效期多久
  • 金蝶旗舰版如何反过账
  • 员工报销款可以公转私吗
  • 置换上市公司资质要求
  • 摊销保险费会计分录怎么写
  • 计划成本材料采购明细账一般采用的格式是什么
  • 收到个税返还计入成本吗
  • 货物运输政策
  • 股权转让 分期付款
  • 股权转让印花税减半征收政策
  • 北京房产税如何申报缴纳
  • 金税盘用途
  • 物流公司一般纳税人和小规模纳税人
  • 一般纳税人房租没有发票怎么办
  • 应交税费包括了增值税吗
  • 非全日制员工个税扣除标准
  • 外汇实收资本如何做账
  • 无形资产的定义和特征
  • 成本分析总结报告
  • 进口货物退税流程
  • 高新企业认定 研发委外费用
  • 文件在另一个程序中打开,怎么解决
  • 如何在虚拟机上下载软件
  • vmware运行win10很卡怎么解决
  • 为什么我的windows10
  • 企业债卷利息收入是营业收入吗
  • 网上申报税务局怎么操作
  • linux系统查询mac地址命令
  • 怎么检查电脑硬件是否正常
  • 苹果手机下载手机克隆哪个版本
  • 更新出现网络异常
  • PHP:Memcached::touchByKey()的用法_Memcached类
  • 认知度高的人
  • 外籍人员一次性奖金
  • element-ui dialog
  • 公司偷税漏税有哪些表现形式
  • 通行费发票认证怎么操作
  • 前端上传文件夹怎么操作
  • yum命令详解
  • php计时函数
  • 新增办税员需要哪些资料
  • 个税可以补申报几个月的码
  • 企业合并的定义是什么
  • 期末调整汇兑损益计算
  • 织梦官方网站
  • 织梦下载站源码带采集
  • 企业签发银行承兑汇票支付采购款
  • 物流进项发票应纳税额
  • 城建税小规模纳税人
  • 应付账款尾差如何处理
  • 基建并账时用交付使用资产对冲基建拨款
  • 进出口货物报关单填制规范
  • 地下车库的成本和房子哪个高
  • 余利宝和余额宝哪一个安全
  • 新公司办公室装修费怎么记账
  • 往来核算会计实训总结
  • 单位租用员工个人的车可以不收租吗
  • 公司租的房子电费发票怎么开
  • 累计摊销可以做什么分录
  • 调整去年管理费用怎么做分录
  • 会计凭证,报告怎么做
  • mysql免安装版下载
  • linux下mysql5.7.17最新稳定版本安装教程
  • win7打印机共享关闭密码保护
  • WIN7系统如何设置自动关机
  • 破解ssh端口
  • 怎么用老毛桃u盘装win7系统 老毛桃u盘装win7系统教程图解
  • perl正则表达
  • ExtJS4 表格的嵌套 rowExpander应用
  • 安卓炫酷壁纸
  • [置顶] 启动unity3d 提示“unity3d EditorWindow could not be loaded because the script is not found in the projec”
  • javascript的理解
  • python3.5怎么保存
  • js遍历foreach
  • 报销的费用交印花税吗
  • 云南省新农合网上缴费app
  • 职工疗养费可以税前扣除吗
  • 威海行风热线实时收听
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设