浅析js封装和作用域
浅析js封装和作用域
发布时间:2016-12-30 来源:查字典编辑
摘要:基本的代码如下复制代码代码如下:vartext="test";vart=newfunctionTest(text);functionfunc...

基本的代码如下

复制代码 代码如下:

<html xmlns="http://www.w3.org/1999/xhtml">

<head><title>

</title>

<script src="jquery-1.4.4.min.js" type="text/javascript"></script>

<script type="text/javascript">

var text="test";

var t=new functionTest(text);

function functionTest(text)

{

var alertText=text

$("#btnSave").click(function (e) {

alertTestInnert();

});

this.AlertTest= function ()

{

alert(alertText);

}

function alertTestInnert()

{

alert(alertText);

}

}

function alertTestOuter()

{

alert(text);

}

</script>

<body>

<input type="button" id="btnSave" value="保存" />

<input type="button" id="btnCancel" value="取消" />

</body>

</html>

再点击保存,取消时需要一定的操作,第一次的代码如上:

点击保存,根本没反应,很奇怪,这种最常用的jquery绑定事件竟然不起作用了。后来一比较才知道,其实自己忘了,绑定应该在$(document).ready(function () {})中进行;

js修改如下:

复制代码 代码如下:

var text="test";

$(document).ready(function () {

var t=new functionTest(text);

});

function functionTest(text)

{

var alertText=text

$("#btnSave").click(function (e) {

alertTestInnert();

});

this.AlertTest= function ()

{

alert(alertText);

}

function alertTestInnert()

{

alert(alertText);

}

}

function alertTestOuter()

{

alert(text);

}

修改后,点击保存可以了,而且正确的传递了参数,这样就可以保证在不同点的情况下传递不同的参数了。

但还有一种情况,页面会动态生成一些标签,这些标签的点击事件也需要处理。再次以取消按钮为例,由于是动态生成,就不能使用和保存一样的方法了。

只能使用onclick="javascript:t.AlertTest;"这种类似的绑定。于是有测试如下:

修改

复制代码 代码如下:

<input type="button" id="btnCancel" value="取消" />

点击没反应,修改如下

复制代码 代码如下:

<input type="button" id="btnCancel" value="取消" />

点击还是没反应,也没有错误,在修改如下:

复制代码 代码如下:

<input type="button" id="btnCancel" value="取消" />

这次有反应了,看来是少了一对括号。修改为封装的方法如下:

复制代码 代码如下:

<input type="button" id="btnCancel" value="取消" />

点击没反应,提示Uncaught ReferenceError: t is not defined

看来是变量t没有定义,作用域起作用了。于是修改js如下,也就是把变量t放到外边,赋值放在里边,就是如下:

复制代码 代码如下:

var t;

var text="test";

$(document).ready(function () {

t=new functionTest(text);

});

function functionTest(text)

{

var alertText=text

$("#btnSave").click(function (e) {

alertTestInnert();

});

this.AlertTest= function ()

{

alert(alertText);

}

function alertTestInnert()

{

alert(alertText);

}

}

function alertTestOuter()

{

alert(text);

}

最后一步,如何给取消调用的方法传递参数?

第一步修改js如下,也就是把取消调用的函数改为需要传递参数的方法,代码如下:

复制代码 代码如下:

var t;

var text="test";

$(document).ready(function () {

t=new functionTest(text);

});

function functionTest(text)

{

var alertText=text

$("#btnSave").click(function (e) {

alertTestInnert();

});

this.AlertTest= function (text)

{

alert(text);

}

function alertTestInnert()

{

alert(alertText);

}

}

function alertTestOuter()

{

alert(text);

}

相应的html修改如下:

复制代码 代码如下:

<input type="button" id="btnCancel" value="取消" />

点击,看看是不是正确的传递了参数,一切正常,看来这样就完成了。

最后整理js代码:

把通用的js代码放到一个js文件里,这里放到了common.js中,不同的代码放在htm中,修改后的所有代码如下:

复制代码 代码如下:

<html xmlns="http://www.w3.org/1999/xhtml">

<head><title>

</title>

<script src="jquery-1.4.4.min.js" type="text/javascript"></script>

<script src="common.js" type="text/javascript"></script>

<script type="text/javascript">

var t;//需要定义的外边,否则点击取消时,不能访问到变量t

var text="test";//传递的参数

$(document).ready(function () {

t=new functionTest(text);//给t赋值,定义不能放在这里边

});

</script>

<body>

<input type="button" id="btnSave" value="保存" />

<input type="button" id="btnCancel" value="取消" />

</body>

</html>

common.js的代码:

复制代码 代码如下:

function functionTest(text)

{

var alertText=text

$("#btnSave").click(function (e) {

alertTestInnert();

});

this.AlertTest= function (text)

{

alert(text);

}

function alertTestInnert()

{

alert(alertText);

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新Javascript教程学习
热门Javascript教程学习
编程开发子分类