问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

javascript可以不嵌套在html里面写吗? vbscript是不是一定要嵌套在html中

发布网友 发布时间:2022-05-14 23:07

我来回答

5个回答

懂视网 时间:2022-05-15 03:29

这次给大家带来维护JS代码的三种方法,维护JS代码的注意事项有哪些,下面就是实战案例,一起来看一下。

维护。在其他语言中,考虑将已存在的对象作为库用来完成开发任务。在JS中,我们可以将已存在的对象视为一种背景,在这之上可以做任何事情。你应该把已存在的JS对象如一个使用工具函数库一样来对待。

不覆盖方法

不新增方法

不删除方法

当项目中只有你一个开发者时,因为你了解它们,对它们有预期,这些种类的修改很容易处理。当与一个团队一起在做一个大型的项目时,像这些情况的修改会导致大量的混乱,也会浪费很多时间。

不覆盖方法

在JS中,有史以来最糟糕的实践是覆盖一个非自己拥有的对象的方法,JS中覆盖一个已存在的方法是难以置信的容易。即使那个神圣的document.getElementById()方法也不例外,可以被轻而易举地覆盖。也许你看过类似下面的模式(这种做法也叫“函数劫持”):

// 不好的写法document._originalGetElementById = document.getElementById;document.getElementById = function (id) { if (id === 'window') { return window;
 } else { return document._originalGetElementById(id);
 }
}

上例中,将一个原生方法document.getElementById()的“指针”保存在document._originalGetElementById中,以便后续使用。然后,document.getElementById()被一个新的方法覆盖了。新方法有时也会调用原始的方法,其中有一种情况不调用。这种“覆盖加可靠退化”的模式至少和覆盖原生方法一样不好,也许会更糟,因为document.getElementById()时而符合预期,时而不符合。 在一个大型的项目中,一个此类问题就会导致浪费大量时间和金钱。

不新增方法

在JS中为已存在的对象新增方法是很简单的。只需要创建一个函数赋值给一个已存在的对象的属性,使其成为方法即可。这种做法可以修改所有类型的对象。

// 不好的写法 - 在
DOM对象
上增加了方法document.sayImAwesome = function () {
 alert("You're awesome.");
}// 不好的写法 - 在原生对象上增加了方法Array.prototype.reverseSort = function () { return this.sort().reverse();
}// 不好的写法 - 在库对象上增加了方法YUI.doSomething = function () { // 代码}

几乎不可能阻止你为任何对象添加方法(ES5新增了三个方法可以做到,后面会介绍)。为非自己拥有的对象增加方法一个大问题,会导致命名冲突。因为一个对象此刻没有某个方法不代表它未来也没有。 更糟糕的是如果将来原生的方法和你的方法行为不一致,你将陷入一场代码维护的噩梦。

我们要从Prototype JS类库的发展历史中吸取教训。从修改各种各样的JS对象角度而言Prototype非常著名。它很随意地为DOM和原生的对象增加方法。实际上,库的大多数代码定义为扩展已存在的对象,而不是自己创建对象。Prototype的开发者将该库看作是对JS的补充。在小于1.6的版本中,Prototype实现了一个document.getElementsByClassName()方法。也许你认识该方法,因为在HTML5中是官方定义的,它标准化了Prototype的用法。

Prototype的document.getElementsByClassName()方法返回包含了指定CSS类名的元素的一个数组。Prototype在数组上也增加了一个方法,Array.prototype.each(),它在该数组上迭代并在每个元素上执行一个函数。这让开发者可以编写如下代码:

document.getElementsByClassName('selected').each(doSomething);

在HTML5标准化该方法和浏览器开始原生地实现之前,代码是没有问题的。当Prototype团队知道原生的document.getElementsByClassName()即将到来,所以他们增加了一些防守性的代码,如下:

if (!document.getElementsByClassName) { document.getElementsByClassName = function (classes) { // 非原生实现
 };
}

故Prototype只是在document.getElementsByClassName()不存在的时候定义它。这看上去好像问题就此解决了,但还有一个重要的事实是:HTML5的document.getElementsByClassName()不返回一个数组,所以each()方法根本不存在。原生的DOM方法使用了一个特殊化的集合类型称为NodeList。document.getElementsByClassName()返回一个NodeList来匹配其他的DOM方法的调用。

如果浏览器中原生实现了document.getElementsByClassName()方法,那么由于NodeList没有each()方法,无论是原生的或是Prototype增加的each()方法,在执行时都将引发一个JS错误。最后的结局是Prototype的用户不得不既要升级类库代码还要修改他们自己的代码,真是一场维护的噩梦。

从Prototype的错误中可以学到,你不可能精确预测JS将来会如何变化。标准已经进化了,它们经常会从诸如Prototype这样的库代码中获得一些线索来决定下一代标准的新功能。事实上,原生的Array.prototype.forEach()方法在ECMAScript5有定义,它与Prototype的each()方法行为非常类似。问题是你不知道官方的功能与原生会有什么样的不同,甚至是微小的区别也将导致很大的问题。

大多数JS库代码有一个插件机制,允许为代码库安全地新增一些功能。如果想修改,最佳最可维护的方式是创建一个插件。

不删除方法

删除JS方法和新增方法一样简单。当然,覆盖一个方法也是删除已存在的方法的一种方式。最简单的删除一个方法的方式就是给对应的名字赋值为null。

// 不好的写法 - 删除了DOM方法document.getElementById = null;

将一个方法设置为null,不管它以前是怎么定义的,现在它已经不能被调用到了。如果方法是在对象的实例上定义的(相对于对象的原型而言),也可以使用delete操作符来删除。

var person = { name: 'Nicholas'};delete person.name;console.log(person.name); // undefined

上例中,从person对象中删除了name属性。delete操作符只能对实例的属性和方法起作用。如果在prototype的属性或方法上使用delete是不起作用的。例如:

// 不影响delete document.getElementById;console.log(document.getElementById('myelement')); // 仍然能工作

因为document.getElementById()是原型上的一个方法,使用delete是无法删除的。但是,仍然可以用对其赋值为null的方式来阻止被调用。

无需赘述,删除一个已存在对象的方法是糟糕的实践。不仅有依赖那个方法的开发者存在,而且使用该方法的代码有可能已经存在了。删除一个在用的方法会导致运行时错误。如果你的团队不应该使用某个方法,将其标识为“废弃”,可以用文档或者用静态代码分析器。删除一个方法绝对应该是最后的选择。

反之,不删除你拥有对象的方法实际上是比较好的实践。从库代码或原生对象上删除方法是非常难的事情,因为第三方代码正依赖于这些功能。在很多案例中,库代码和浏览器都会将有bug或不完整的方法保留很长一段时间,因为删除它们以后会在数不胜数的网站上导致错误。

相信看了本文案例你已经掌握了方法,更多精彩请关注Gxl网其它相关文章!

推荐阅读:

web开发中如何避免空比较

为什么web开发中需要避免使用全局变量

热心网友 时间:2022-05-15 00:37

js代码当然可以不嵌套在html里面,而且写js的最好习惯就是js代码于html代码的完全分离,当然写到这种程度还是需要很多经验和技巧。

js代码有三种方式加入到页面中。

一,直接嵌套在html的body标签内
通常需要这样做的情况是,你的js代码短小且需要在html代码结构中动态创建一些页面元素,这样将js代码放在适合的地方有利于页面元素管理和查看。
这样做你只需要将js代码放在一对<script ...></script>中就可以插到页面中了,通常你还需要加上//<![CDATA[...//]]>标签以防止浏览器将你代码内的字符串解析为代码执行。

二。放在head标签之间
估计这是比较常用的一种方式,代码管理会更加方便,不过如果是大量的代码建议采用第三种方式

三。外部链接文件方式
你只需要将js代码单独存储为一份js文件放到站点目录下,接着在相应页面head标签内添加一个链接即可生效,这样做即实现了js代码于html的分离,是很好的编程习惯,当然js的事件触发代码是否放到html中就看具体情况了

三种方式恰当的结合使用即可以非常顺利的完成对js代码的管理于维护

热心网友 时间:2022-05-15 01:55

vbscript的输出方式和javascript一样是:document.write

<script Language="VBScript">
document.write "1234"
</script>

只有到了服务器端的vbscript即:asp 里输出才是:response.write

热心网友 时间:2022-05-15 03:29

楼上说的很明白了

response.write 是用与服务器端的

而document.write 是用在客户端的 所以javascript 和vascript 可以通用

具体参考一下 request 和 response 的用法

热心网友 时间:2022-05-15 05:21

<script Language="VBScript">
document.write "1234"
</script>
------------------------------------

<%response.write "1234%>
用VBscript也可以放到html里运行的。只是你写的response.write这个是在服务器端运行的。只通写在

<% %>之间。例如:<%response.write "1234%>
或者:<script language="vbscript" runat="server">
response.write "<%response.write "1234%>
1234"
</script>
但是要保佑为.asp页第一个可以是html
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
荣耀v20杀后台严重? 聊天时哪些回复让人感觉不舒服? 货物运输保险案例分析 卞和泣玉注释 求解,卞和泣玉没学过,在线等解。 葛加走之底读什么 在等腰三角形ABC中,AB=AC=5,BC=6,求角B的三角函数值 ...人开走一架战斗机,在一架客机下面飞,好几个飞机来拦截, ...话是三架飞机 机型各不同 在山区飞行发现恐怖分子用驴车运核弹 用AK... ...的成为战斗机飞行员。战争结束回国继续抢银 昆明一男子醉驾撞上护栏,此男子会被如何惩罚? 酒驾撞了护栏 醉驾撞护栏判几个月 醉驾撞坏护栏判刑吗 酒驾撞坏公共设施怎么处罚 怎样让一只猫咪尽快熟悉新环境? 投影仪输入选择电脑跟视频哪个较清析? 冬天要用什么来保养,皮肤才不会干燥? 冬天怎么保护好皮肤!(有中性和油性) 冬天有什么东西能护理下皮肤呢? 在冬天里,保护皮肤最好的方法是什么? 冬天如何保护皮肤 冬天怎样保护皮肤能使皮肤不干燥? 香甜软麻花怎么做 RMVB转换器的热门软件 rmvb转换文件格式 RMVB怎么转换? 如何将RMVB转换成MP4或3GP格式? 购买招标书的费用是否属于不当得利 有没有免费的RMVB的转换器啊 酒驾撞栏杆逃逸怎么处理 酒驾撞了护栏跑了第二天处理办法? 酒驾撞护栏怎么处罚 北京哪有大的手机卖场 北京哪里有卖手机比较集中的地方 北京哪里卖手机?(大型综合的) 在北京 哪里的手机专营店比较集中? 北京西单地区那边有很多卖手机的店吗? 北京哪里的手机卖得好 请问北京的朋友,王府井哪里有大的手机卖场? 请问北京哪里卖手机比较便宜而且有保障?拜托了各位 谢谢 迷你世界大船怎么做战舰 新买的电脑不知道怎么用 雪花冰柜和新飞冰柜哪个好 迷你世界冒险模式晚上在船上过夜安全吗? 雪花冰柜不允许放山城啤酒 雪花之星冰柜质量怎么样 六斤面粉能够用15克的高活性干酵母吗? 移动硬盘上on/off的开关按钮是什么意思?谢谢 移动硬盘上的开关有何用