第二章 JavaScript面向对象编程
一、语句:
(一)new
(二)delete 从对象中删除属性、行为或从数组中删除元素。删除行为时是删除函数指针, 如:delete car.drive,而不是delete car.drive();
(三)with 如:将对象的属性和方法包含起来,代码块中就不需要引用这个对象
with(document.myForm){
if(name.value == "") alert("");
if(pwd.value == "") alert("");
}
(四)for/in 遍历对象的所有属性,也可以遍历数组的元素。
for(i in document){}
var arr=["a","b","c"];for(i in arr){alert(arr[i])};
二、自定义对象:
1.工厂模式
function createCar(color,brand){ var car = new Object(); car.color=color; car.brand=brand; car.run = function(){alert("is run");};
return car; }
缺陷:1、不正规的构造一个对象(new)
2、每次创建一个对象,其行为也会被创建,占用资源;
2.构造函数方式
function Car(color,brand){ this.color=color; this.brand=brand; this.run=function(){alert("is run");}; }
缺陷:和工厂模式相同,每次创建一个对象,其行为也会被创建,占用资源;
3.原型方式
function Car(){ } Car.prototype.color="red"; Car.prototype.run=function(){ alert("is run"); } var car = new Car(); //car.color="black";//子类重写这个属性; alert(car.color); Car.prototype.color="blue";//相当于父类修改了属性,在子类没有覆盖这个属性的前提下,所有子类对象属性都被修改 alert(car.color); car.run();
缺陷:属性值不能在初始化时定义;
4.混合构造函数和原型方式
function Car(color){ this.color=color; } Car.prototype.run=function(){ alert("is run"); } var c = new Car("red"); alert(c.color); c.run();
5.动态原型
function Car(color){ this.color=color; if(!Car.prototype._inited){ Car.prototype.run = function(){alert("is run")}; alert("inited"); Car.prototype._inited = true; } } var c = new Car("blue"); alert(c.color); c.run(); var d = new Car("white"); alert(d.color); d.run();
6.混合工厂模式
function Car(color){ var car = new Object(); car.color=color; car.run=function(){alert("is run")}; return car; } var e = new Car(); e.run();
7.JSON格式创建对象
var f = {color:"red",brand:"奥迪",run:function(){alert("is run")}}; alert(f.brand); f.run();
三、对象继承实现
1.对象冒充
function Car(color,brand){ this.color=color; this.brand=brand; this.run=function(){alert("is run")}; } function FlyCar(color,brand){ this._inherit=Car; this._inherit(color,brand); delete this._inherit; this.fly=function(){alert("is fly")}; } var a = new FlyCar("red","奥迪"); a.run(); a.fly();
2.CALL与apply类似
function FlyCar(color,brand){ Car.call(this,color,brand); this.fly=function(){alert("is fly")}; } var a = new FlyCar("red","奥迪"); alert(a.color); a.run(); a.fly();
3.原型链 只能单一继承 缺陷是 构造函数不能初始化属性
function FlyCar(color,brand){ this.color = color; this.brand = brand; this.fly=function(){alert("is fly")}; } FlyCar.prototype = new Car(); var b = new FlyCar(); b.run(); b.fly();
四、实例:
根据上图(UML)实现对象继承。
//继承 冒充 function Polygon(sides){ this.sides = sides; this.getArea = function(){return 0}; } //triangle function Triangle(base,height){ this._inherit=Polygon; this._inherit(3); delete this._inherit; this.base = base; this.height = height; if(!Triangle._inited){ this.getArea = function(){return this.base*this.height*0.5}; Triangle._inited = true; } } var t = new Triangle(5,10); alert(t.getArea()); alert(t.sides); //rectangle function Rectangle(length,width){ this._inherit=Polygon; this._inherit(4); delete this._inherit; this.length = length; this.width = width; if(!Rectangle._inited){ this.getArea = function(){return this.length*this.width}; Rectangle._inited = true; } } var r = new Rectangle(5,10); alert(r.getArea()); alert(r.sides); //继承 原型链 function Polygon(sides){ this.sides = sides; this.getArea = function(){return 0}; } //triangle /*function Triangle(base,height){ this.base = base; this.height = height; } Triangle.prototype = new Polygon(3); Triangle.prototype.getArea = function(){return this.base*this.height*0.5}; var tt = new Triangle(5,10); alert(tt.sides); alert(tt.getArea()); //rectangle function Rectangle(length,width){ this.length = length; this.width = width; } Rectangle.prototype = new Polygon(4); Rectangle.prototype.getArea = function(){return this.length*this.width}; var rr = new Rectangle(5,10); alert(rr.sides); alert(rr.getArea()); //混合方式继承 function Polygon(sides){ this.sides = sides; } Polygon.prototype.getArea = function(){return 0;}; function Triangle(sides,base,height){ Polygon.call(this,sides); this.base = base; this.height = height; } Triangle.prototype = new Polygon(); Triangle.prototype.getArea = function(){return this.base*this.height*0.5;}; var tt = new Triangle(3,5,10); alert(tt.sides); alert(tt.getArea()); function Rectangle(sides,length,width){ Polygon.call(this,sides); this.length = length; this.width = width; } Rectangle.prototype = new Polygon(); Rectangle.prototype.getArea = function(){return this.length*this.width;}; var rr = new Rectangle(4,5,10); alert(rr.sides); alert(rr.getArea());
发表评论
-
第八、AJAX基础
2009-07-01 20:42 1080第八章 AJAX基础 关于JavaScrip ... -
第七、JavaScript表单编程
2009-06-30 20:21 1018第七章 JavaScript表单编程 一、表单 ... -
第六、DOM操作样式表
2009-06-29 20:39 2281第六章 DOM操作样式表 一、操作style样 ... -
第五、文档对象模型DOM
2009-06-26 22:02 1521第五章 文档对象模型 一、理解DOM ... -
第四、浏览器对象模型BOM
2009-06-25 21:38 1233第四章 浏览器对象模型BOM 一、BOM简介 ... -
第三、JavaScript事件模型
2009-06-25 20:07 1683第三章 JavaScript事件模型 一、事件 ... -
第一、Javascript核心基础语法
2009-06-19 23:32 1639第一章 Javascript核心基础语法 ...
相关推荐
资源名称:JavaScript面向对象编程指南(第2版)内容简介:1.本书是唯一一本介绍Javascript面向对象编程的图书。2.本书作者是知名的Web开发人员和作者。受到国内众多前端开发人员,如淘宝UED团队的推崇和推荐...
JavaScript面向对象编程指南
JavaScript面向对象编程指南(第2版).pdf 高清带目录
完整版完整版完整版完整版完整版完整版完整版完整版完整版
JavaScript面向对象编程指南 第2版 高清 带索引书签目录_样章.pdf,风格轻松易懂,比较适合初学者,原型那块儿讲得透彻,12种继承方式呢。
非常经典的书籍,这本是超清晰文字版本的,非常适合学习。
本人一行注释一行代码翻译了该大师的艺术作品--目的说明它是在第1,2阶段文档演示的JavaScript面向对象的书写方式的进一步改进,它是现代JavaScript面向对象编程方式(使用基本类来编码)的过渡代码--没有它就没有当今...
本书作者是知名的Web开发人员和作者。受到国内众多前端开发人员,如淘宝UED团队的推崇...他还运营着其他一些网站,其中包括JSPatterns.com—一个用于探讨JavaScript模式的网站。, 3.本书内容较为简单,初学者容易上手。
从颇具深度的javascript语言基础到作用域(链),从引用类型到面向对象编程,从极其灵活的匿名函数到闭包的内部机制,从浏览器对象模型(bom)、文档对象模型(dom)到基于事件的web脚本设计,从xml(fax)到ajax及json,从...
第2章 如何以对象方式思考 27 2.1 了解接口与实现之间的区别 28 2.1.1 接口 29 2.1.2 实现 29 2.1.3 接口/实现示例 29 2.2 设计接口时使用抽象思维 33 2.3 尽可能为用户提供最小接口 35 2.3.1 确定用户 35 ...
学习Javascript,最难的地方...《Javascript高级程序设计(第二版)》(Professional JavaScript for Web Developers, 2nd Edition) 它们都是非常优秀的Javascript读物,推荐阅读。 笔记分成三部分。今天的第一部分是讨
JavaScript 是近年来非常受瞩目的一门编程语言,它既支持面向对象编程,也支持函数式编程。本书专门介绍JavaScript函数式编程的特性。 全书共9章,分别介绍了JavaScript函数式编程、一等函数与Applicative编程、变量...
从颇具深度的javascript语言基础到作用域(链),从引用类型到面向对象编程,从极其灵活的匿名函数到闭包的内部机制,从浏览器对象模型(bom)、文档对象模型(dom)到基于事件的web脚本设计,从xml(fax)到ajax及json,从...
从颇具深度的javascript语言基础到作用域(链),从引用类型到面向对象编程,从极其灵活的匿名函数到闭包的内部机制,从浏览器对象模型(bom)、文档对象模型(dom)到基于事件的web脚本设计,从xml(fax)到ajax及json,从...
从颇具深度的javascript语言基础到作用域(链),从引用类型到面向对象编程,从极其灵活的匿名函数到闭包的内部机制,从浏览器对象模型(bom)、文档对象模型(dom)到基于事件的web脚本设计,从xml(fax)到ajax及json,从...
#Javascript:Packt Publishing的面向对象编程 您将学到什么: 熟悉JavaScript语言构造的基础知识以及面向对象的编程及其应用程序。 学习使用Node.js在JavaScript中构建可扩展的服务器应用程序 以三种编程语言生成...
个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例。
第7章 使用JAVA进行面向对象的程序设计 第8章 JAVA语法基础 第9章 Applet图形应用程序和基本绘图 第10章 处理鼠标和键盘事件 第11章 窗口 第12章 使用布局管理器安排窗口 第13章 图形用户界面控件 第14章 使用JAVA...