javaScript OOP
JavaScript的对象总有4类:
脚本对象:如Object,Math,Date 等。
浏览器对象:window,document,location等。
Dom对象:对dom操作的对象,document,Node等
自定义对象:程序员自身定义的对象。
本次介绍程序员如何定义对象,对象是由类创建出来的,在Java中,我们可以通过语法:
类 obj=new 类();
来定义对象,那么在JavaScript中如何定义对象呢?
在JavaScript中,我们首先讨论一下JavaScript的一个重要特性:动态性。
JavaScript是一门动态语言,什么意思呢?我认为包含两个含义:
一是任何变量都可以不用考虑数据类型,在运行时才能区分当前变量的数据类型,也就是说JavaScript是弱类型的,在声明变量时,变量类型都是var ,不能是Object ,String,Date等。比如:
var a=1; //此时变量a是数字类型
a="hello"; //此时变量a是字符串类型
a=new Object(); 此时变量a是对象
上面程序运行没有问题。
动态性的第二个含义是对象属性可以在运行时,动态添加属性和方法,我们知道,在JavaScript中,任何对象都是Object的子类。有如下示例:
var obj=new Object();
obj.name="Jerry";
obj.sayHello=function ()
{
alert("Hello,world!");
}
alert(obj.name);
obj.sayHello();
我们在上面的代码里,动态的为一个对象obj添加一个属性name 和一个方法sayHello.
在JavaScript中任何函数都可以new,例如:
function Hello()
{
alert("Hello");
}
var h=new Hello();
上面代码的解释是:创建一个对象h,对象没有任何属性和方法。在new一个函数时,函数的函数体自动执行,此时,函数体就犹如对象的构造方法。
继续观察如下代码:
function Hello()
{
var obj=new Object();
obj.name="Jerry";
return obj;
}
var h=new Hello();
alert(h.name);
输出Jerry;
这时,对象h就是函数返回的Object对象,因此可以说,JavaScript通过 new 函数() 这样的语法来获取对象时,如果函数有return ,那么return 的结果就是实例化后的对象。
另一方面,在JavaScript中,与java一样,任何对象都有内部关键字this ,表示当前对象,那么一个函数既然是对象的构造方法,能否这样使用呢?
function Hello()
{
this.name="Jerry";
}
var h=new Hello();
alert(h.name);
运行结果与前面的一样,此时,该函数就与java中的类有点相似了,那么如何添加方法呢?可以这样:
function Hello()
{
this.name="Jerry";
this.sayHello=function()
{
alert("Hello,world");
}
}
var h=new Hello();
//alert(h.name);
h.sayHello();
OK,到此为止,类就定义出来了,接下来我们看看讨论一下JavaScript的封装,继承,多态。
封装,不用说了,既然是类,那么天生就具备封装功能,只不过这里类的所有属性和方法都是public 的,这一点与java不一样。
继承,就是扩展,在JavaScript中,任何时候都可以动态的给对象添加属性和方法,那么是不是就是继承呢?也可以这么理解:
function SubHello()
{
var h=new Hello();
h.age=20;
return h;
}
var sub=new SubHello();
sub.sayHello();
alert(sub.age);
我们可以看出,调用结果正常运行,但是这种继承方式感觉别扭,JavaScript给我们提供了一个关键字,prototype,就是原型的意思。先测试一下使用方法
Hello.prototype.age=20;
var h=new Hello();
alert(h.age);
运行结果正常20。
封装为函数实现继承
function SubHello()
{
Hello.prototype.age=20;
return new Hello();
}
这就是说SubHello是从Hello继承过来,并且发生的扩展。
接下来看看多态,多态形式是把子类对象赋值给父类的引用,但是在JavaScript中所有的对象都是var类型的,因此,JavaScript天生就是多态的,其实任何动态语言天生就是多态的,如Ruby.
当然,JavaScript不支持方法重载,这一点非常重要。
我们看看对象调用。
调用属性:
var h=new Hello();
alert(h.name);
着非常简单。其实JavaScirpt对象就是属性和方法的集合,因此我们调用属性时可以这样调用:
var h=new Hello();
alert(h["name"]);
并且对象动态添加属性时也可以这样:
var h=new Hello();
h["test"]=1234;
alert(h.test);
结果正常。
调用方法:
方法定义的时候可以是这样的
var h=new Hello();
h.testMethod=function()
{
alert("test");
}
可以看出,这个地方就是c语言中的函数指针,可以把方法进行赋值,方法名称就是方法的地址,因此还可以这样:
function test(){
alert("test");
}
h.testMethod=test;
既然函数的名称就是函数的指针,当然和c语言一样不能对方法进行重载。那么如何传递参数呢?
function test(a,b,c)
{
alert(a+b+c);
}
test(1,2,3);
上面函数调用是正常的方法,那么这样调用呢:
test(1,2,3,4,5);
当然也能正常运行,因为函数名是函数的唯一地址,那么参数4,5呢?丢失了吗?
当函数传递参数时,所有的参数保存在JavaScirpt的内置对象arguments中,可以这样得到结果。
function test()
{
if(arguments.length>=3)
{
return arguments[0]+arguments[1]+arguments[2];
}
}
alert(test(1,2,3));
这就是方法调用时要注意的地方arguments。
相关推荐
特别是闭包,它是理解和掌握JavaScript高级特性的重要一步,能帮助开发者实现数据封装和模块化编程。 JavaScript的面向对象特性是其区别于其他脚本语言的一个显著特点。书中详细阐述了基于原型的继承、构造函数、...
js中没有class的概念,我们可以使用function来模拟。 惰性载入函数 例如我们通常使用以下的js代码创建ajax: function createXHR () { var xhr = null; try{ xhr = new XMLHttpRequest(); // FF、Opera、Safari...
总的来说,"JavaScript高级教程"是一个全面学习JavaScript高级特性和实践的宝贵资源,无论你是希望提升现有技能,还是初次接触这门语言,都能从中受益匪浅。通过阅读"阅读器下载.htm"和"E书说明.txt",你将了解如何...
以上只是JavaScript高级特性和设计模式的一小部分。深入理解和熟练应用这些概念,将有助于你编写更高效、可维护的代码,提升软件开发的水平。在学习过程中,通过实践项目和不断研究,你可以更好地掌握JavaScript的...
2. JavaScript高级特性:这部分可能会深入探讨JavaScript中的一些高级概念,比如作用域和闭包、原型链与继承、异步编程模型(如Promise、async/await)、以及模块化编程等。 3. 前端框架和库:文档可能涉及到当前...
总的来说,《JavaScript高级程序设计》是一本全面覆盖JavaScript高级特性和实践技巧的书籍,无论你是初级开发者还是经验丰富的工程师,都能从中获益,提升你的JavaScript技术水平,更好地应对复杂项目开发的挑战。...
"JavaScript高级编程"这本书深入探讨了这门语言的高级特性和最佳实践,旨在帮助开发者提升技能水平,实现更高效、更可靠的代码编写。以下是该书可能涵盖的一些关键知识点: 1. **基础语法**:包括变量、数据类型...
《JavaScript高级程序设计实例代码》是一份专注于深入解析和实践JavaScript高级特性的资源集合。这份压缩包中的"Examples"文件夹很可能包含了各种JavaScript编程的实际示例,旨在帮助开发者提升对JavaScript高级概念...
总的来说,《JavaScript 高级程序设计》第三版中文版是一本全面覆盖JavaScript高级特性和实践的书籍,无论你是想提升技能还是系统学习,都能从中受益匪浅。通过阅读并实践书中的例子,你将能够掌握JavaScript的深层...
本书是 JavaScript 经典图书的新版,涵盖 ECMAScript 2019,全面、深入地介绍了 JavaScript 开发者必须掌握的前端开发技术,涉及 JavaScript 的基础特性和高级特性。 本书详尽讨论了 JavaScript 的各个方面,从 ...
此外,函数是JavaScript的核心特性之一,书中对其进行了深入讲解,包括函数表达式、闭包、作用域等概念,这些都是理解和掌握JavaScript高级特性的关键。 面向对象编程是JavaScript的一大特色,书中通过构造函数、...
一、JavaScript高级特性 在JavaScript高级阶段,你会接触到许多进阶概念,如闭包(closures)、原型链(prototype chain)、作用域(scope)以及变量提升(hoisting)。闭包是理解JavaScript内存管理的关键,它允许...
二、JavaScript高级特性 1. 异步编程:JavaScript的事件循环机制使得异步编程成为可能。`Promise`、`async/await`提供了更加优雅的错误处理和流程控制方式。 2. 模块化:通过`export`和`import`关键字,JavaScript...
在"计算机软件-编程源码-Javascript高级教程.zip"这个压缩包中,我们可以期待找到一些关于JavaScript高级特性和实践的教程。这些教程可能包括以下几个方面: 1. **面向对象编程**:JavaScript支持原型继承和类的...
### JavaScript高级特性 #### 异步编程 JavaScript是一种单线程语言,但是通过异步编程机制如回调函数、Promise和async/await,可以有效地处理非阻塞任务,避免UI冻结,提高应用性能。 #### 模块化编程 随着项目...
掌握对象和面向对象编程对于理解JavaScript高级特性至关重要。 文档对象模型(DOM)是JavaScript中与页面内容进行交互的核心,书中介绍了DOM的结构,如何使用JavaScript来访问和修改DOM,以及动态创建和操作DOM元素...
《JavaScript高级程序设计(第3版)》是JavaScript学习者必备的经典教材,它深入讲解了JavaScript的核心概念、语法以及高级特性。这本书由资深JavaScript专家Nicholas C. Zakas撰写,为读者提供了全面且深入的...