悟透JavaScript之初看原型 --- (2)
来源:互联网 发布:软件测试发展趋势 编辑:程序博客网 时间:2024/05/16 05:12
那么,对于多层次类型的构造函数情况又如何呢?
我们再来看下面的代码:
1functionPerson(name)//基类构造函数
2{
3 this.name = name;
4};
5
6Person.prototype.SayHello =function()//给基类构造函数的prototype添加方法
7{
8 alert("Hello, I'm " +this.name);
9};
10
11functionEmployee(name, salary)//子类构造函数
12{
13 Person.call(this, name); //调用基类构造函数
14 this.salary = salary;
15};
16
17Employee.prototype =newPerson();//建一个基类的对象作为子类原型的原型,
这里很有意思
18
19Employee.prototype.ShowMeTheMoney =function()//给子类添构造函数的pr
ototype添加方法
20{
21 alert(this.name + " $" + this.salary);
22};
23
24varBillGates =newPerson("Bill Gates");//创建基类Person的BillGates对象
25varSteveJobs =newEmployee("Steve Jobs", 1234);//创建子类Employee
的SteveJobs对象
26
27BillGates.SayHello();//通过对象直接调用到prototype的方法
21
28SteveJobs.SayHello();//通过子类对象直接调用基类prototype的方法,关注!
29SteveJobs.ShowMeTheMoney();//通过子类对象直接调用子类prototype的方法
30
31alert(BillGates.SayHello == SteveJobs.SayHello);//显示:true,表明prototyp
e的方法是共享的
这段代码的第17行,构造了一个基类的对象,并将其设为子类构造函数的prototype,这是很有意思的。这样做的目的就是为了第28行,通过子类对象也可以直接调用基类prototype的方法。为什么可以
这样呢?原来,在JavaScript中,prototype不但能让对象共享自己财富,而且prototype还有寻根问祖的天性,从而使得先辈们的遗产可以代代相传。当从一个对象那里读取属性或调用方法时,如果该对象自身不存在这样的属性或方法,就会去自己关联的prototype对象那里寻找;如果prototype没有,又会去prototype自己关联的前辈prototype那里寻找,直到找到或追溯过程结束为止。
在 JavaScript内部,对象的属性和方法追溯机制是通过所谓的prototype链来实现的。当用new操作符构造对象时,也会同时将构造函数的prototype对象指派给新创建的对象,成为该对象内置的原型对象。对象内置的原型对象应该是对外不可见的,尽管有些浏览器(如Firefox)可以让我们访问这个内置原型对象,但并不建议这样做。内置的原型对象本身也是对象,也有自己关联的原型对象,这样就形成了所谓的原型链。
在原型链的最末端,就是Object构造函数prototype属性指向的那一个原型对象。这个原型对象是所有对象的最老祖先,这个老祖宗实现了诸如toString等所有对象天生就该具有的方法。其他内置构造函数,如Function, Boolean, String, Date和RegExp等的prototype都是从这个老祖宗传承下来的,但他们各自又定义了自身的属性和方法,从而他们的子孙就表现出各自宗族的那些特征。
这不就是“继承”吗?是的,这就是“继承”,是JavaScript特有的“原型继承”。- 悟透JavaScript之初看原型 --- (2)
- 悟透JavaScript之初看原型 --- (1)
- 悟透JavaScript之初看原型 --- (3)
- 悟透JavaScript-初看原型
- 悟透JavaScript - 初看原型
- 《悟透JavaScript》学习札记九之初看原型
- 悟透JavaScript(李站老师)-初看原型
- 悟透JavaScript之原型扩展 ---(2)
- 悟透JavaScript之原型真谛---(2)
- 悟透JavaScript之原型扩展 ---(1)
- 悟透JavaScript之原型真谛 --- (1)
- 悟透JavaScript之原型真谛 ---(3)
- 再读《悟透javascript》之二、JavaScript原型
- JavaScript原型和闭包之---原型(三)
- javascript原型和闭包之------原型链 (七)
- javascript基础之八(原型揭秘)
- JavaScript之原型链(一)
- JavaScript之原型链(二)
- 如何在win7下装ubuntu(硬盘版安装)
- 1.显示的字段要有老师name, age 每个老师所带的学生人数,2 只列出老师age为40以下学生age为12以上的记录
- 悟透JavaScript之初看原型 --- (1)
- BOOL,int,float,指针类型的变量a 与“零”的比较语句
- 挖挖Hive的代码(三)——生成MapReduce(中)
- 悟透JavaScript之初看原型 --- (2)
- 【hdu】 find the most comfortable road (并查集)
- 悟透JavaScript之初看原型 --- (3)
- 我本将心对明月
- C#中的多线程使用 -- Thread 类: 使用回调函数从一个线程中检索数据
- 在CSS中定义a:link、a:visited、a:hover、a:active顺序
- Linux+Nginx+Php架设高性能WEB服务器
- IIS
- native修饰符