当前位置: 首页 > 图文教程 > 网络编程 > Javascript > JavaScript 面向对象入门精简篇

Javascript
自己开发Dojo的建议框架
js每次Title显示不同的名言
不用AJAX和IFRAME,说说真正意义上的ASP+JS无刷新技术
无限级别的菜单(侧拉菜单)
点选TOP后并不是直接跳到页顶的,而是滚动上去
js下拉菜单中自动信息轮换播放
英文首字母全大写的js实现脚本
实例区别onClick和onDBClick两事件方法
改变文本框字体颜色的js脚本
js星空效果代码
判断li是否有样式的js代码
文本框点击时文字消失,失去焦点时文字出现
如何让一个层关闭之后,就算刷新页面了也不显示。除非关闭页面再次打开
右下角弹出窗口效果代码
JS控制对象移动效果
验证用户是否修改过页面的数据的实现方法
Javascript操作select方法大全[新增、修改、删除、选中、清空、判断存在等]
正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
EXT富客户端后台管理系统 初步代码
不同浏览器javascript变量作用域的处理方法

Javascript 中的 JavaScript 面向对象入门精简篇


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 213 ::
收藏到网摘: n/a

围绕面向对象的几大关键字:封装 ,继承 ,多态 ,展开JavaScript面向对象

封装 :javascript中创建对象的模式中,个人认为通过闭包才算的上是真正意义上的封装 ,所以首先我们先来简单介绍一下闭包,看下面这个例子:

复制代码 代码如下:
C.掺元类: 把一些常用通用性比较大的方法统一封装在一个函数中,然后通过下面这个函数分派给要用到这些方法的类.还可以针对不同的类,选择性的传递需要的方法。
复制代码 代码如下:

<script type="text/javascript">
function agument(receveClass,giveClass){
if(arguments[2]){
var len = arguments.length;
for(i=2;i<len;i++){
receveClass.prototype[arguments[i]] = giveClass.prototype[arguments[i]];
}
}
else{
for(method in giveClass.prototype){
if(!receveClass.prototype[method]){
receveClass.prototype[method] = giveClass.prototype[method];
}
}
}
};
var Name = function(){};
Name.prototype ={
sayLike:function(){
alert("i like oldfish");
},
sayLove:function(){
alert("i love oldfish");
}
}
var Fish = function(){};
var ioldFish = new Fish();
agument(Fish,Name,"sayLove");
ioldFish.sayLove();
ioldFish.sayLike();
</script>

多态 :个人觉得这个比较抽象,很难言传,所以下面就从重载和覆盖两个方面来简单阐述一下。
重载 :上面这个例子中agument函数初始带了两个参数,但是在后面的调用中,agument(Fish,Name,”sayLove”)同样可以带入任意多个参数,javascript的重载,是在函数中由用户自己通过操作arguments这个属性来实现的。
覆盖 :这个很简单,就是子类中定义的方法如果与从超类中继承过来的的方法同名,就覆盖这个方法(这里并不是覆盖超类中的方法,注意一下),这里就不累赘了!
最后重点着墨说一下this和执行上下文 ,在前面举的封装例子中,this都是表示this所在的类的实例化对象本身,但是并不是千篇一律的,打个比方,通过HTML属性定义的事件处理代码,见如下代码:
复制代码 代码如下:

<script type="text/javascript">
var Name = function(name) {
this.name = name;
this.getName = function () {
alert(this.name);
}
};
var ioldFish = new Name("老鱼"),
btn = document.getElementById('btn');
btn.onclick = ioldFish.getName;
//btn.onclick = function(){ioldFish.getName.call(ioldFish)};
</script>

上例中点了按钮以后弹出框里并没有显示出实例对象的属性,这是因为this的执行上下文已经改变了,他现在所在的上下文应该是input这个 HTML标签,但是该标签又不存在getName这个属性,所以自然无法输出这个属性的属性值了!从这个例子我们不难看出:执行上下文是在执行时才确定的,它随时可以变。
当然你可以去掉上面我注释掉的那段代码,通过call改变this的执行上下文,从而获取getName方法。apply方法同样可以实现改变执行上下文的功能,不过在prototype框架中发现了一个更为优美的实现方法bind。看一下这个方法的实现吧,不得不感叹先人的伟大……
复制代码 代码如下:

Function.prototype.bind = function(obj) {
var method = this,
temp = function() {
return method.apply(obj, arguments);
};
}

相信如果能看明白的话,您已经可以靠这些知识点,去写一个简单的脚本框架了,多多实践,相信不久的将来就能高手进级了