面向对象的JavaScript-002

1.

 1 <script type="text/javascript">
 2
 3     // Define the Person constructor
 4     var Person = function(firstName) {
 5       this.firstName = firstName;
 6     };
 7
 8     // Making sure that this points to the right thing regardless of how the object is instantiated can be difficult. However, there is a simple idiom to make this easier.
 9     var Person = function(firstName) {
10       if (this instanceof Person) {
11         this.firstName = firstName;
12       } else {
13         return new Person(firstName);
14       }
15     }
16
17     // Add a couple of methods to Person.prototype
18     Person.prototype.walk = function(){
19       console.log("I am walking!");
20     };
21
22     Person.prototype.sayHello = function(){
23       console.log("Hello, I‘m " + this.firstName);
24     };
25
26     // Define the Student constructor
27     function Student(firstName, subject) {
28       // Call the parent constructor, making sure (using Function#call)
29       // that "this" is set correctly during the call
30       Person.call(this, firstName);
31
32       // Initialize our Student-specific properties
33       this.subject = subject;
34     }
35
36     // Create a Student.prototype object that inherits from Person.prototype.
37     // Note: A common error here is to use "new Person()" to create the
38     // Student.prototype. That‘s incorrect for several reasons, not least
39     // that we don‘t have anything to give Person for the "firstName"
40     // argument. The correct place to call Person is above, where we call
41     // it from Student.
42     Student.prototype = Object.create(Person.prototype); // See note below
43
44     // Set the "constructor" property to refer to Student
45     Student.prototype.constructor = Student;
46
47     // Replace the "sayHello" method
48     Student.prototype.sayHello = function(){
49       console.log("Hello, I‘m " + this.firstName + ". I‘m studying "
50                   + this.subject + ".");
51     };
52
53     // Add a "sayGoodBye" method
54     Student.prototype.sayGoodBye = function(){
55       console.log("Goodbye!");
56     };
57
58     // Example usage:
59     var student1 = new Student("Janet", "Applied Physics");
60     student1.sayHello();   // "Hello, I‘m Janet. I‘m studying Applied Physics."
61     student1.walk();       // "I am walking!"
62     student1.sayGoodBye(); // "Goodbye!"
63
64     // Check that instanceof works correctly
65     console.log(student1 instanceof Person);  // true
66     console.log(student1 instanceof Student); // true
67
68     // 如果 On older JavaScript engines without Object.create, one can either use a "polyfill" (aka "shim", see the linked article), or one can use a function that achieves the same result, such as:
69     function createObject(proto) {
70         function ctor() { }
71         ctor.prototype = proto;
72         return new ctor();
73     }
74
75     // Usage:
76     Student.prototype = createObject(Person.prototype);

时间: 2024-10-10 04:31:07

面向对象的JavaScript-002的相关文章

全面理解面向对象的 JavaScript

对象的上下文依赖 var str = "我是一个 String 对象 , 我声明在这里 , 但我不是独立存在的!" var obj = { des: "我是一个 Object 对象 , 我声明在这里,我也不是独立存在的." }; var fun = function() { console.log( "我是一个 Function 对象!谁调用我,我属于谁:", this ); }; obj.fun = fun; console.log( this

全面理解面向对象的JavaScript

转载:http://justcoding.iteye.com/blog/2019293 原文:http://www.ibm.com/developerworks/cn/web/1304_zengyz_jsoo/index.html?ca=drs-#major6 前言 当今 JavaScript 大行其道,各种应用对其依赖日深.web 程序员已逐渐习惯使用各种优秀的 JavaScript 框架快速开发 Web 应用,从而忽略了对原生 JavaScript 的学习和深入理解.所以,经常出现的情况是,

前端开发:面向对象与javascript中的面向对象实现(一)

前端开发:面向对象与javascript中的面向对象实现(一) 前言: 人生在世,这找不到对象是万万不行的.咱们生活中,找不到对象要挨骂,代码里也一样.朋友问我说:“嘿,在干嘛呢......”,我:“找不到对象!”,他:“就你那样也能找得到对象?”.我一脸黑线...... 废话不多说,今天博主要跟大家聊的是<面向对象与javascript中的面向对象实现>”. 面向对象理解: 面向对象是一种对现实世界理解和抽象的方法,是一种先进的程序设计理念,是一种比较抽象的,多形态的设计模式.我们可以这么理

深入全面理解面向对象的 JavaScript

深入全面理解面向对象的 JavaScript (原著: 曾 滢, 软件工程师, IBM,2013 年 4 月 17 日) JavaScript 函数式脚本语言特性以及其看似随意的编写风格,导致长期以来人们对这一门语言的误解,即认为 JavaScript 不是一门面向对象的语言,或者只是部分具备一些面向对象的特征.本文将回归面向对象本意,从对语言感悟的角度阐述为什么 JavaScript 是一门彻底的面向对象的语言,以及如何正确地使用这一特性. 前言 当今 JavaScript 大行其道,各种应用

JavaScript Oriented[探究面向对象的JavaScript高级语言特性]

JavaScript Oriented 探究面向对象的JavaScript高级语言特性 Prologue . JavaScript Introduce 1.  JS Abstract JavaScript是由Netscape公司工程师Brendan Eich研发的脚本语言,经过推广和流行,兼容ECMA-262标准,至今用于描述HTML网页行为.(前端验证,检测,响应,触发,控制等动态行为) Knowledge Tree 2.     About Document 本文涉及到的概念有JavaScr

[天天向上中]JavaScript系列----面向对象的JavaScript(2)

http://www.midifan.com/moduleuser-index-431566.htmhttp://www.midifan.com/moduleuser-index-431711.htmhttp://www.midifan.com/moduleuser-index-431496.htmhttp://www.midifan.com/moduleuser-index-431703.htmhttp://www.midifan.com/moduleuser-index-431798.htm

前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型

前端开发:面向对象与javascript中的面向对象实现(二)构造函数与原型 前言(题外话): 有人说拖延症是一个绝症,哎呀治不好了.先不说这是一个每个人都多多少少会有的,也不管它究竟对生活有多么大的影响,单单是自己的念想受到了一定得局限,想法不能够像平地而起的高楼大厦建成一样.可是那大楼也是有烂尾的呀,我觉得最重要的还是外在环境与个人观念的先决条件,决定了拖延症的症状的好坏,有那么一些人,它也有拖延症,但是它在拖的中间,想的更多,看的更远.事情在做的时候更加有条不紊,这拖延症这样看来,它也是好

用面向对象的Javascript来介绍一下自己

看了一道题目<用面向对象的Javascript来介绍一下自己>,然后自己觉得挺好玩的,所以就编写如下的代码. // HELPER function extend(sup, overrides) { var sub = overrides && overrides.constructor || function() { sup.apply(this, arguments); }; var fn = function() {}; var subp; fn.prototype = n

面向对象的JavaScript --- 封装

面向对象的JavaScript --- 封装 封装 封装的目的是将信息隐藏.一般而言,我们讨论的封装是封装数据和封装实现.真正的封装为更广义的封装,不仅包括封装数据和封装实现,还包括封装类型和封装变化. 封装数据 封装实现 封装类型 封装变化 封装数据 在许多语言的对象系统中,封装数据是由语法解析来实现的,这些语言也许提供了 private.public.protected 等关键字来提供不同的访问权限.但JavaScript并没有提供对这些关键字的支持,我们只能依赖变量的作用域来实现封装特性,

面向对象的JavaScript --- 多态

面向对象的JavaScript --- 多态 多态 "多态"一词源于希腊文 polymorphism,拆开来看是poly(复数)+ morph(形态)+ism,从字面上我们可以理解为复数形态. 多态的实际含义是:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果.换句话说,给不同的对象发送同一个消息的时候,这些对象会根据这个消息分别给出不同的反馈.从字面上来理解多态不太容易,下面我们来举例说明一下. ? 主人家里养了两只动物,分别是一只鸭和一只鸡,当主人向它们发出&quo