Javascript继承
一直想对Javascript再次做一些总结,正好最近自己写了一个小型Js
UI库,总结了一下Js的继承机制,在网上也看了一些前辈们博客里的总结,感觉分析不是特别全面。这里仅仅是把自己的学习体会拿出来分享一下,希望对大家
学习Javascript有所帮助。
Javascript本身是从Perl语言的语法演变而来的,本质上是脚本语言,随着版本的更新逐渐加入的对面向对象的模拟。我认为Js的面向对象模拟总
体上做得还是不错的,因为我们不能盲从任何一种理念,不能纯粹的为了OOP而OOP,我们需要抓住的是面向对象的好处到底是什么?为了这些优点去OOP,
才是最明智的选择,所以说Js做得还不错。
Js的继承在很多书里面细致的分了很多种类型和实现方式,大体上就是两种:对象冒充、原型方式。这两种方式各有优点和缺陷,这里我先列举出来,再从底层分
析区别:
(一)对象冒充
JScript code
function
A(name){
this
.name
=
name;
this
.sayHello
=
function
(){alert(
this
.name
+
” say Hello
!
”);};
}
function
B(name,id){
this
.temp
=
A;
this
.temp(name);
//
相当于new A();
delete
this
.temp;
//
防止在以后通过temp引用覆盖超类A的属性和方法
this
.id
=
id;
this
.checkId
=
function
(ID){alert(
this
.id
==
ID)};
}
当构造对象B的时候,调用temp相当于启动A的构造函数,注意这里的上下文环境中的this对象是B的实例,所以在执行A构造函数脚本时,所有A的变量
和方法都会赋值给this所指的对象,即B的实例,这样子就达到B继承了A的属性方法的目的。之后删除临时引用temp,是防止维护B中对A的类对象(注
意不是实例对象)的引用更改,因为更改temp会直接导致类A(注意不是类A的对象)结构的变化。
我们看到了,在Js版本更新的过程中,为了更方便的执行这种上下文this的切换以达到继承或者更加广义的目的,增加了call和apply函数。它们的
原理是一样的,只是参数不同的版本罢了(一个可变任意参数,一个必须传入数组作为参数集合)。这里就以call为例子,解释一下用call实现的对象冒充
继承。
JScript code
function
Rect(width, height){
this
.width
=
width;
this
.height
=
height;
this
.area
=
function
(){
return
this
.width
*
相关文档:
Javascript中的常见问题
1. 集合类对象问题
现有代码中许多集合类对象取用时使用 (),IE 能接受,Firefox 不能。
解决方法:改用 [] 作为下标运算。如:document.forms("formName") 改为
Js代码
document.forms[
"formName"
];
//又如:
document.getEle ......
JavaScript就这么回事:基础知识
1 创建脚本块
1: <script language="JavaScript">
2: JavaScript code goes here
3: </script>
2 隐藏脚本代码
1: <script language="JavaScript">
2: <!--
3: document.write("Hello");
4: // -->
5: </script>
在不支持JavaScript的浏览 ......
张孝详javascript讲座笔记一
收藏
< type="text/javascript">
document.body.oncopy = function() {
if (window.clipboardData) {
......
面向对象的
JavaScript
引用(
reference
)
“引用”是一个指向对象实际位置的指针。这是一个极为强大的特性,但有一个前提:实际的对象肯定不会是引用。字符串永远是字符串,数组永远是数组。不过多个变量却能够指向同一对象。
JavaScript
基于的就是这样一个引用系统。
这门语言通过维护一系 ......