JavaScript 继承详解4
在本章中,我们将分析Douglas Crockford关于JavaScript继承的一个实现
Crockford是JavaScript开发社区最知名的权威,是JSON
、JSLint
、JSMin
和ADSafe
之父,是《JavaScript: The Good Parts》的作者。
现在是Yahoo的资深JavaScript架构师,参与YUI的设计开发。 这里有一篇文章
详细介绍了Crockford的生平和著作。
当然Crockford也是我等小辈崇拜的对象。
调用方式
首先让我们看下使用Crockford式继承的调用方式:
注意:代码中的method、inherits、uber都是自定义的对象,我们会在后面的代码分析中详解。
// 定义Person类
function Person(name) {
this.name = name;
}
// 定义Person的原型方法
Person.method("getName", function() {
return this.name;
});
// 定义Employee类
function Employee(name, employeeID) {
this.name = name;
this.employeeID = employeeID;
}
// 指定Employee类从Person类继承
Employee.inherits(Person);
// 定义Employee的原型方法
Employee.method("getEmployeeID", function() {
return this.employeeID;
});
Employee.method("getName", function() {
// 注意,可以在子类中调用父类的原型方法
return "Employee name: " + this.uber("getName");
});
// 实例化子类
var zhang = new Employee("ZhangSan", "1234");
console.log(zhang.getName()); // "Employee name: ZhangSan"
这里面有几处不得不提的硬伤:
子类从父类继承的代码必须在子类和父类都定义好之后进行,并且必须在子类原型方法定义之前进行。
虽然子类方法体中可以调用父类的方法,但是子类的构造函数无法调用父类的构造函数。
代码的书写不够优雅,比如原型方法的定义以及调用父类的方法(不直观)。
当然Crockford的实现还支持子类中的方法调用带参数的父类方法,如下例子:
function Person(name) {
this.name = name;
}
Person.method("getName", function(prefix) {
return prefix + this.name;
});
function Employee(name, employeeID) {
this.name = name;
this.employeeID = employeeID
相关文档:
//关闭,父窗口弹出对话框,子窗口直接关闭
this.Response.Write("<script language=javascript>window.close();");
//关闭,父窗口和子窗口都不弹出对话框,直接关闭
this.Response.Write("");
this.Response.Write("{top.opener =null;top.close();}");
this.Response.Write("");
//弹出窗口刷新当前页面width=20 ......
replace()最简单的算是能力就是简单的字符替换。
示例代码如下:
<script language="javascript">
var strM = "javascript is a good script language";
//在此我想将字母a替换成字母A
alert(strM.replace("a","A"));
</script>
它只替换了首字母。但如 ......
<script language="JavaScript" type="text/JavaScript">
<!--
function displayScreenSize()
{
var bodyWidth ......
Javascript 获取radiobuttonlist(单选框)的值
function check() {
var RadioButtonList1 = document.getElementById('<%=RadioButtonList1.ClientID%>');
......
1,对象的构成
对象有特性构成(attribute),可以是原始值,也可以是引用值。如果特性存放的是函数,它将被看做对象的方法(method),否则该特性被看做属性(property)。
2,定义类或对象
(1)工厂方式
Code
function createCar(sColor,iDoors) {
&nb ......