狠狠撸

狠狠撸Share a Scribd company logo
面向对象的 js 湖南博源科技有限公司 程鹏 2009.2
面向对象的 js 对象和属性 构造函数 方法 原型对象和继承 面向对象的 JavaScript
对象和属性 对象的创建 使用 new 运算符创建对象 var o = new Object(); var now = new Date(); 使用对象直接量创建并初始化对象 var circle = { x:0, y:0, radius:2 }; var person = { name:  “John”, age: 30, married: true };   (sample1)
对象和属性 属性的设置和查询 通常使用“ .” 运算符来存取对象的属性。 var book = new Object(); book.title = “Javascript reference”; alert(book.title); js 可以通过赋值来创建对象的属性。 创建属性时不需要使用关键字“ var” 。 属性创建后可以在任何时间修改它的值。
对象和属性 属性的枚举 使用 for/in 循环来枚举对象的属性。 function displayPropertyNames(obj) { var names = “”; for (var name in obj) names += name + “\n”; alert(names); }( sample2 ) 这种方法 可以枚举所有用户自定义的属性,但是不能枚举出某些预定义的属性或方法。
对象和属性 未定义的属性 读取不存在的属性时,结果是” undefined” 。 var o = new Object(); alert(o.title); 使用运算符 delete 来删除一个对象的属性。 var o = new Object(); o.title=“javascript reference”; delete o.title; ( sample3 )
构造函数 构造函数是具有两个特性的 JavaScript 函数: 它由 new 运算符调用。 传递给它的是一个对新创建的空对象的引用,将该引用作为关键字 this 的值,而且它还要对新创建的对象进行适当的初始化。 function  Rectangle(w, h) { this.width = w; this.height = h; } var rect1  = new Rectangle(2, 4); 构造函数通常没有返回值,但是它可以返回一个对象,如果这样做,被返回的对象将成为 new 表达式的值,而 this 所引用的对象将被丢弃。
方法 方法就是通过对象调用的 JavaScript 函数。 方法的定义方式与属性的定义方式相同。 var o = new Object(); o.m = function() {alert(“method”);}; o.m(); 方法有一个非常重要的属性:在方法体内部,关键字 this 是调用该方法的对象。
方法 使用构造函数定义方法 function Rectangle(w, h) { this.width = w; this.height = h; this.area = function() { return this.width * this.height; } }  var rect2 = new Rectangle(3, 5); alert(rect2.area());  ( sample4 )
原型对象和继承 每个对象都有原型对象 JavaScript 对象都继承原型对象的所有属性 一个对象的原型对象是由创建并初始化该对象的构造函数定义的。 使用原型对象可以大量减少对象对内存的需求 即使属性在对象被创建后才添加到它的原型对象中,对象也可以继承这些属性。 继承只发生在读属性值的时候,写属性值时不发生继承而是创建新属性。
原型对象和继承 内部类也有原型对象。 String.prototype.endWith = function(c) { return c == this.charAt(this.length – 1); } var message = “hello”; message.endWith(“h”);  // 返回 false message.endWith(“o”);  // 返回 true ( sample5 )
面向对象的 JavasScript JavaScript 没有类的概念, JavaScript 采取以原型对象为基础的继承机制。 使用 JavaScript 模拟 Java 类的实现 实例属性 实例方法 类属性 类方法 超类和子类 作为关联数组的对象 对象的属性和方法
实例属性 每个对象都有单独的实例属性的副本 Circle 类中有 r 属性,那么每个 Circle 对象的实例都会有一个 r 属性。 实例属性是通过实例存取的。 c.r = 3; 默认情况下, JavaScript 中的任何对象属性都是实例属性。 为了真实地模拟面向对象的程序设计语言,我们把那些在对象中用构造函数创建或初始化的属性称为实例属性。
实例方法 实例方法和实例属性非常相似,只是它是方法而不是值。 每个实例方法都是由类的所有实例共享的,而不是有自己的副本。 实例方法使用关键字 this 来引用它们要操作的对象或实例。 JavaScript 中,给类定义一个实例方法是通过把构造函数的原型对象中的一个属性设置为函数值来实现的。 function Circle(radius) { this.r = radius; } Circle.prototype.area = function() { return 3.14 * this.r * this.r; } ( sample6 )
类属性 类属性是一个与类相关联的变量,而不是和类的每个实例相关联的变量,无论一个类创建多少个实例,每个类属性都只有一个副本。 类属性是通过类存取的。 JavaScript 中,通过定义构造函数自身的属性来定义类属性。 例如,定义 Circle 类的 PI 属性: Circle.PI = 3.14;
类 方法 类方法是一个与类关联在一起的方法,要调用类方法,就必须使用类本身,而不能使用该类的特定实例。 在类方法中使用关键字 this 没有意义。 在 JavaScript 中定义类的方法只需要用合适的方法作为构造函数的属性即可。
超类和子类 在 JavaScript 中类 Object 是最通用的类,其他类都是 Object 的子类。 JavaScript 中通过 prototype 实现超类和子类之间的继承关系。 多级继承时,子类的同名属性或方法会覆盖父类的属性或方法。
作为关联数组的对象 使用属性名的字符串来引用属性 object.property == object[“property”] 在 预先不知道属性名的时候,可以使用关联数组来存取属性 例如,有一个名为 portfolio 的对象保存了每支股票的名字以及每支股票的数量,我们使用 portfolio.ibm 就可以得到拥有 ibm 股票的数量。 如果用户输入的股票名称保存在变量 stock_name 中,则无法用“ .” 运算符来存取对象 portfolio 的属性,但是可以使用“ []” 来存取: portfolio[stock_name]
对象的属性和方法 constructor 属性 toString() 方法 toLocaleString() 方法 valueOf() 方法 hasOwnProperty() 方法 isPrototypeOf() 方法
constructor 属性 每个对象都具有 constructor 属性,它引用的是用来初始化该对象的构造函数。 var o = new Rectangle(1, 2) o.constructor == Rectangle; // 值为 true 该属性是从原型对象继承来的。 原型对象创建之初,包括一个 constructor 属性,用来引用构造函数。 例,如果存在函数 f ,则 f.prototype.constructor 总是等于 f (除非将它设为别的值)。 constructor 在确定给定对象的类型时是一个功能强大的工具。 例,下列代码可以用来确定一个未知对象的类型: if ((typeof o == “object”) && (o.constructor == Date)) // 然后用 Date 对象做一些操作。 不能保证 constructor 属性总是存在的。例如使用一个全新的对象来替换构造函数的原型对象,而新对象可能不具有有效的 constructor 属性。 ( sample7 )
toString() 方法 toString() 没有任何实际参数,档 JavaScript 需要将一个对象转换成字符串时就调用这个对象的 toString() 方法。 我们可以自定义 toString() 方法来替换默认的方法。 Object .prototype.toString.apply(object) 方法总是调用默认的 toString() 方法。
valueOf() 方法 valueOf() 方法与 toString() 方法非常相似,当 JavaScript 需要把一个对象转换成字符串以外的原始类型 ( 通常是数字 ) 时,就需要调用它。 valueOf() 方法返回 this 所引用的对象的值的数据。
hasOwnProperty() 方法 如果对象局部定义了一个非继承的属性,属性名是由一个字符串实际参数指定的,那么该方法返回 true ,否则返回 false 。 例: var o = new Object(); o.hasOwnProperty(“undef”); // false: 未定义 o.hasOwnProperty( “toString”); //false: 继承属性 Number.hasOwnProperty(“MAX_VALUE”); //true
isPrototypeOf() 方法 如果调用对象是实际参数指定的对象的原型对象,该方法返回 true ,否则返回 false 。 例: var o = new Object(); o.isPrototypeOf(Object); // false Object.isPrototypeOf(o ); //  false Object.prototype.isPrototypeOf(o); // true Function.prototype.isPrototypeOf(Object); // true
谢谢!

More Related Content

What's hot (20)

2011中正資管學術部講座 Java-Object
2011中正資管學術部講座 Java-Object2011中正資管學術部講座 Java-Object
2011中正資管學術部講座 Java-Object
Veck Hsiao
?
《Python 3.5 技術手冊》第六章草稿
《Python 3.5 技術手冊》第六章草稿《Python 3.5 技術手冊》第六章草稿
《Python 3.5 技術手冊》第六章草稿
Justin Lin
?
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试
lydiafly
?
闯蝉的国(转载)
闯蝉的国(转载)闯蝉的国(转载)
闯蝉的国(转载)
Leo Hui
?
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术
bigqiang zou
?
冲浪 Object-c
冲浪 Object-c冲浪 Object-c
冲浪 Object-c
jeff kit
?
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanup
ted-xu
?
从模组到类别
从模组到类别从模组到类别
从模组到类别
Justin Lin
?
9. 資料結構
9. 資料結構9. 資料結構
9. 資料結構
Justin Lin
?
Javascript oop-o52tiger
Javascript oop-o52tigerJavascript oop-o52tiger
Javascript oop-o52tiger
o52tiger
?
5. 从模组到类别
5. 从模组到类别5. 从模组到类别
5. 从模组到类别
Justin Lin
?
第二章
第二章第二章
第二章
贺 利华
?
03 Managing Memory with ARC
03 Managing Memory with ARC03 Managing Memory with ARC
03 Managing Memory with ARC
Tom Fan
?
Java script 的物件
Java script 的物件Java script 的物件
Java script 的物件
meebox
?
浅尝箩蚕耻别谤测
浅尝箩蚕耻别谤测浅尝箩蚕耻别谤测
浅尝箩蚕耻别谤测
fangdeng
?
JavaScript Advanced Skill
JavaScript Advanced SkillJavaScript Advanced Skill
JavaScript Advanced Skill
firestoke
?
14 hibernate hql查询1
14 hibernate hql查询114 hibernate hql查询1
14 hibernate hql查询1
Zelin Wang
?
2011中正資管學術部講座 Java-Object
2011中正資管學術部講座 Java-Object2011中正資管學術部講座 Java-Object
2011中正資管學術部講座 Java-Object
Veck Hsiao
?
《Python 3.5 技術手冊》第六章草稿
《Python 3.5 技術手冊》第六章草稿《Python 3.5 技術手冊》第六章草稿
《Python 3.5 技術手冊》第六章草稿
Justin Lin
?
Ecma script edition5-小试
Ecma script edition5-小试Ecma script edition5-小试
Ecma script edition5-小试
lydiafly
?
闯蝉的国(转载)
闯蝉的国(转载)闯蝉的国(转载)
闯蝉的国(转载)
Leo Hui
?
Java Script 引擎技术
Java Script 引擎技术Java Script 引擎技术
Java Script 引擎技术
bigqiang zou
?
冲浪 Object-c
冲浪 Object-c冲浪 Object-c
冲浪 Object-c
jeff kit
?
5, initialization & cleanup
5, initialization & cleanup5, initialization & cleanup
5, initialization & cleanup
ted-xu
?
从模组到类别
从模组到类别从模组到类别
从模组到类别
Justin Lin
?
Javascript oop-o52tiger
Javascript oop-o52tigerJavascript oop-o52tiger
Javascript oop-o52tiger
o52tiger
?
5. 从模组到类别
5. 从模组到类别5. 从模组到类别
5. 从模组到类别
Justin Lin
?
03 Managing Memory with ARC
03 Managing Memory with ARC03 Managing Memory with ARC
03 Managing Memory with ARC
Tom Fan
?
Java script 的物件
Java script 的物件Java script 的物件
Java script 的物件
meebox
?
浅尝箩蚕耻别谤测
浅尝箩蚕耻别谤测浅尝箩蚕耻别谤测
浅尝箩蚕耻别谤测
fangdeng
?
JavaScript Advanced Skill
JavaScript Advanced SkillJavaScript Advanced Skill
JavaScript Advanced Skill
firestoke
?
14 hibernate hql查询1
14 hibernate hql查询114 hibernate hql查询1
14 hibernate hql查询1
Zelin Wang
?

Viewers also liked (9)

REFERENCE - MARITIME - PA. PRO.ADMIN & HR OFFICER
REFERENCE - MARITIME - PA. PRO.ADMIN & HR OFFICERREFERENCE - MARITIME - PA. PRO.ADMIN & HR OFFICER
REFERENCE - MARITIME - PA. PRO.ADMIN & HR OFFICER
Maria Raju
?
Omar Romero Urban Latino Article
Omar Romero Urban Latino ArticleOmar Romero Urban Latino Article
Omar Romero Urban Latino Article
Lulaine Compere
?
Truy?n Dragon ball t?p 27
Truy?n Dragon ball t?p 27Truy?n Dragon ball t?p 27
Truy?n Dragon ball t?p 27
??ng Ng?c Th?
?
Pares craneales2Pares craneales2
Pares craneales2
Joaquin Candia Nogales
?
性能测试实践1
性能测试实践1性能测试实践1
性能测试实践1
yiditushe
?
Actividad 3.2Actividad 3.2
Actividad 3.2
Darwin Veliz Reyes
?
La educación en un mundo global (1)La educación en un mundo global (1)
La educación en un mundo global (1)
Génesis Morillo Rojas
?
Cuerpo humano atlas visualCuerpo humano atlas visual
Cuerpo humano atlas visual
NORELYS SANTOS
?
Gender discrimination in india
Gender discrimination in indiaGender discrimination in india
Gender discrimination in india
Nikunj Agrawal
?
REFERENCE - MARITIME - PA. PRO.ADMIN & HR OFFICER
REFERENCE - MARITIME - PA. PRO.ADMIN & HR OFFICERREFERENCE - MARITIME - PA. PRO.ADMIN & HR OFFICER
REFERENCE - MARITIME - PA. PRO.ADMIN & HR OFFICER
Maria Raju
?
Omar Romero Urban Latino Article
Omar Romero Urban Latino ArticleOmar Romero Urban Latino Article
Omar Romero Urban Latino Article
Lulaine Compere
?
Truy?n Dragon ball t?p 27
Truy?n Dragon ball t?p 27Truy?n Dragon ball t?p 27
Truy?n Dragon ball t?p 27
??ng Ng?c Th?
?
Pares craneales2Pares craneales2
Pares craneales2
Joaquin Candia Nogales
?
性能测试实践1
性能测试实践1性能测试实践1
性能测试实践1
yiditushe
?
Actividad 3.2Actividad 3.2
Actividad 3.2
Darwin Veliz Reyes
?
La educación en un mundo global (1)La educación en un mundo global (1)
La educación en un mundo global (1)
Génesis Morillo Rojas
?
Cuerpo humano atlas visualCuerpo humano atlas visual
Cuerpo humano atlas visual
NORELYS SANTOS
?
Gender discrimination in india
Gender discrimination in indiaGender discrimination in india
Gender discrimination in india
Nikunj Agrawal
?

Similar to 面向对象的闯蝉培训 (20)

闯补惫补蝉肠谤颈辫迟之昨是今非
闯补惫补蝉肠谤颈辫迟之昨是今非闯补惫补蝉肠谤颈辫迟之昨是今非
闯补惫补蝉肠谤颈辫迟之昨是今非
Tony Deng
?
Java script closures
Java script closuresJava script closures
Java script closures
skywalker1114
?
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
jay li
?
厂辫谤颈苍驳框架
厂辫谤颈苍驳框架厂辫谤颈苍驳框架
厂辫谤颈苍驳框架
eastsky
?
所谓闭包
所谓闭包所谓闭包
所谓闭包
ilovey4
?
J Query Learn
J Query LearnJ Query Learn
J Query Learn
guestfb42fc
?
16 CoreData
16 CoreData16 CoreData
16 CoreData
Tom Fan
?
贬颈产别谤苍补迟别教程
贬颈产别谤苍补迟别教程贬颈产别谤苍补迟别教程
贬颈产别谤苍补迟别教程
Shilong Sang
?
组合、备忘录、建造者模式、原型
组合、备忘录、建造者模式、原型组合、备忘录、建造者模式、原型
组合、备忘录、建造者模式、原型
诸葛修车网-诸葛商城
?
Web设计 4 锋利的j_query(进入公司级应用阶段)
Web设计 4 锋利的j_query(进入公司级应用阶段)Web设计 4 锋利的j_query(进入公司级应用阶段)
Web设计 4 锋利的j_query(进入公司级应用阶段)
ziggear
?
Backbone js and requirejs
Backbone js and requirejsBackbone js and requirejs
Backbone js and requirejs
Chi-wen Sun
?
Hibernate
HibernateHibernate
Hibernate
Henry Huang
?
JavaScript 技術手冊第 5 章
JavaScript 技術手冊第 5 章JavaScript 技術手冊第 5 章
JavaScript 技術手冊第 5 章
Justin Lin
?
箩蚕耻别谤测底层架构
箩蚕耻别谤测底层架构箩蚕耻别谤测底层架构
箩蚕耻别谤测底层架构
fangdeng
?
About closure
About closureAbout closure
About closure
otakustay
?
闯补惫补蝉肠谤颈辫迟之昨是今非
闯补惫补蝉肠谤颈辫迟之昨是今非闯补惫补蝉肠谤颈辫迟之昨是今非
闯补惫补蝉肠谤颈辫迟之昨是今非
Tony Deng
?
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
潜力无限的编程语言闯补惫补蝉肠谤颈辫迟
jay li
?
厂辫谤颈苍驳框架
厂辫谤颈苍驳框架厂辫谤颈苍驳框架
厂辫谤颈苍驳框架
eastsky
?
所谓闭包
所谓闭包所谓闭包
所谓闭包
ilovey4
?
16 CoreData
16 CoreData16 CoreData
16 CoreData
Tom Fan
?
贬颈产别谤苍补迟别教程
贬颈产别谤苍补迟别教程贬颈产别谤苍补迟别教程
贬颈产别谤苍补迟别教程
Shilong Sang
?
Web设计 4 锋利的j_query(进入公司级应用阶段)
Web设计 4 锋利的j_query(进入公司级应用阶段)Web设计 4 锋利的j_query(进入公司级应用阶段)
Web设计 4 锋利的j_query(进入公司级应用阶段)
ziggear
?
Backbone js and requirejs
Backbone js and requirejsBackbone js and requirejs
Backbone js and requirejs
Chi-wen Sun
?
JavaScript 技術手冊第 5 章
JavaScript 技術手冊第 5 章JavaScript 技術手冊第 5 章
JavaScript 技術手冊第 5 章
Justin Lin
?
箩蚕耻别谤测底层架构
箩蚕耻别谤测底层架构箩蚕耻别谤测底层架构
箩蚕耻别谤测底层架构
fangdeng
?

More from yiditushe (20)

厂辫谤颈苍驳入门纲要
厂辫谤颈苍驳入门纲要厂辫谤颈苍驳入门纲要
厂辫谤颈苍驳入门纲要
yiditushe
?
J Bpm4 1中文用户手册
J Bpm4 1中文用户手册J Bpm4 1中文用户手册
J Bpm4 1中文用户手册
yiditushe
?
性能测试实践2
性能测试实践2性能测试实践2
性能测试实践2
yiditushe
?
性能测试技术
性能测试技术性能测试技术
性能测试技术
yiditushe
?
Load runner测试技术
Load runner测试技术Load runner测试技术
Load runner测试技术
yiditushe
?
J2 ee性能测试
J2 ee性能测试J2 ee性能测试
J2 ee性能测试
yiditushe
?
贵濒别虫3中文教程
贵濒别虫3中文教程贵濒别虫3中文教程
贵濒别虫3中文教程
yiditushe
?
开放源代码的全文检索尝耻肠别苍别
开放源代码的全文检索尝耻肠别苍别开放源代码的全文检索尝耻肠别苍别
开放源代码的全文检索尝耻肠别苍别
yiditushe
?
基于分词索引的全文检索技术介绍
基于分词索引的全文检索技术介绍基于分词索引的全文检索技术介绍
基于分词索引的全文检索技术介绍
yiditushe
?
Lucene In Action
Lucene In ActionLucene In Action
Lucene In Action
yiditushe
?
Lucene2 4学习笔记1
Lucene2 4学习笔记1Lucene2 4学习笔记1
Lucene2 4学习笔记1
yiditushe
?
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践
yiditushe
?
Lucene 3[1] 0 原理与代码分析
Lucene 3[1] 0 原理与代码分析Lucene 3[1] 0 原理与代码分析
Lucene 3[1] 0 原理与代码分析
yiditushe
?
7 面向对象设计原则
7 面向对象设计原则7 面向对象设计原则
7 面向对象设计原则
yiditushe
?
10 团队开发
10  团队开发10  团队开发
10 团队开发
yiditushe
?
9 对象持久化与数据建模
9  对象持久化与数据建模9  对象持久化与数据建模
9 对象持久化与数据建模
yiditushe
?
8 Uml构架建模
8  Uml构架建模8  Uml构架建模
8 Uml构架建模
yiditushe
?
厂辫谤颈苍驳入门纲要
厂辫谤颈苍驳入门纲要厂辫谤颈苍驳入门纲要
厂辫谤颈苍驳入门纲要
yiditushe
?
J Bpm4 1中文用户手册
J Bpm4 1中文用户手册J Bpm4 1中文用户手册
J Bpm4 1中文用户手册
yiditushe
?
性能测试实践2
性能测试实践2性能测试实践2
性能测试实践2
yiditushe
?
性能测试技术
性能测试技术性能测试技术
性能测试技术
yiditushe
?
Load runner测试技术
Load runner测试技术Load runner测试技术
Load runner测试技术
yiditushe
?
J2 ee性能测试
J2 ee性能测试J2 ee性能测试
J2 ee性能测试
yiditushe
?
贵濒别虫3中文教程
贵濒别虫3中文教程贵濒别虫3中文教程
贵濒别虫3中文教程
yiditushe
?
开放源代码的全文检索尝耻肠别苍别
开放源代码的全文检索尝耻肠别苍别开放源代码的全文检索尝耻肠别苍别
开放源代码的全文检索尝耻肠别苍别
yiditushe
?
基于分词索引的全文检索技术介绍
基于分词索引的全文检索技术介绍基于分词索引的全文检索技术介绍
基于分词索引的全文检索技术介绍
yiditushe
?
Lucene In Action
Lucene In ActionLucene In Action
Lucene In Action
yiditushe
?
Lucene2 4学习笔记1
Lucene2 4学习笔记1Lucene2 4学习笔记1
Lucene2 4学习笔记1
yiditushe
?
Lucene 全文检索实践
Lucene 全文检索实践Lucene 全文检索实践
Lucene 全文检索实践
yiditushe
?
Lucene 3[1] 0 原理与代码分析
Lucene 3[1] 0 原理与代码分析Lucene 3[1] 0 原理与代码分析
Lucene 3[1] 0 原理与代码分析
yiditushe
?
7 面向对象设计原则
7 面向对象设计原则7 面向对象设计原则
7 面向对象设计原则
yiditushe
?
10 团队开发
10  团队开发10  团队开发
10 团队开发
yiditushe
?
9 对象持久化与数据建模
9  对象持久化与数据建模9  对象持久化与数据建模
9 对象持久化与数据建模
yiditushe
?
8 Uml构架建模
8  Uml构架建模8  Uml构架建模
8 Uml构架建模
yiditushe
?

面向对象的闯蝉培训