JavaScript不包含传统的类继承模型,而是使用prototype原型模型。JavaScript使用原型链的继承方式。

function Foo() {
this.value = 42;
} Foo.prototype = {
method: function() {}
}; function Bar() {} //设置Bar的prototype属性为Foo的实例对象
Bar.prototype = New Foo();
Bar.prototype.foo = ‘Hello World’; //修正Bar.prototype.constructor为Bar本身 (原型构造函数)
Bar.prototype.constructor = Bar; var test = new Bar() //创建Bar的一个实例 //原型链
test [Bar 的实例]
Bar.prototype [Foo的实例]
{foo: ’Hello World'}
Foo.prototype
{method: ...}
Object.prototype
{toString: …/* etc.*/}

上面的例子中,test对象从Bar.prototype和Foo.prototype继承下来,因此,它能访问Foo的原型方法method。同时,它也能够访问那个定义在原型上的Foo实例属性value。需要注意的是new Bar()不会创造出一个新的Foo实例,而是重复使用它原型上的那个实例;因此,所有的Bar实例都会共享相同的value属性。

以上有两点需要注意:

1、简单的使用Bar.prototype = Foo.prototype 将会导致两个对象共享相同的原型。因此,改变任意一个对象的原型都会影响到另一个对象的原型。

2、不要使用Bar.prototype = Foo,因为这不会执行Foo的原型,而是指向函数Foo。因此原型链将会回溯到Function.prototype而不是Foo.prototype,因此method将不会在Bar的原型链上。

属性查找:

当查找一个对象的属性时,JavaScript会向上遍历原型链,直到找到给定名称的属性为止。当查找到原型链的顶部-也就是Object.prototype-但是仍未找到指定的属性,就会返回undefined。

JavaScript学习笔记(二)原型的更多相关文章

  1. Javascript学习笔记二——操作DOM

    Javascript学习笔记 DOM操作: 一.GetElementById() ID在HTML是唯一的,getElementById()可以定位唯一的一个DOM节点 二.querySelector( ...

  2. JavaScript学习笔记之原型对象

    本文是学习<JavaScript高级程序设计>第六章的笔记. JS中,便于批量创建对象的三种模式: 1.工厂模式:用一个函数封装创建对象的细节,传入必要的参数,在函数内部new一个对象并返 ...

  3. JavaScript学习笔记(二)——闭包、IIFE、apply、函数与对象

    一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...

  4. javascript学习随笔(二)原型prototype

    JavaScript三类方法: 1.类方法:2.对象方法:3.原型方法;注意三者异同 例: function People(name){ this.name=name; //对象方法 this.Int ...

  5. javascript学习笔记二

    1.js的string对象 **创建 String对象 *** var str = "abc"; **方法 和 属性(文档) *** 属性 length : 字符串的长度 ***方 ...

  6. javascript学习笔记(四) Number 数字类型

    数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数  toExponential() 方法 用科学 ...

  7. JavaScript学习笔记之数组(二)

    JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...

  8. amazeui学习笔记二(进阶开发4)--JavaScript规范Rules

    amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...

  9. Javascript学习笔记三——操作DOM(二)

    Javascript学习笔记 在我的上一个博客讲了对于DOM的基本操作内容,这篇继续巩固一下对于DOM的更新,插入和删除的操作. 对于HTML解析的DOM树来说,我们肯定会时不时对其进行一些更改,在原 ...

  10. AJax 学习笔记二(onreadystatechange的作用)

    AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...

随机推荐

  1. C语言-运算符与表达式

    运算符分类: 算术运算符:+   -  *    /          % 关系运算符:>  <  =  <=  >= ==  != 逻辑运算符:&& || ! ...

  2. Error:Execution failed for task ':app:mergeDebugResources'. > Some file crunching failed, see logs for details

    Android Studio 编译中断.... Error:Execution failed for task ':app:mergeDebugResources'. > Some file c ...

  3. MVC4 Win2008 aspnet_isapi配置问题

    win2008下配置共2步 1.先确保你的应该程序池选择了asp.net 4.0框架 2.添加脚本映射(解决URL不能重写) 3.添加通配符脚本映射(解决图片不能显示) IIS中的Web应用程序有两种 ...

  4. Nginx Http模块开发

    关于Nginx Http模块开发的文章非常少,只有Emiler的那篇关于Http模块的文章,但是那篇文章里面,并没有说到事件型的模块如何进行开发.而且文章里面提到的内容实在是让人有点意犹未尽.因此,对 ...

  5. Cxf -Wsdl2java详细参数附录

    wsdl2java用法: wsdl2java -p com -d src -all  aa.wsdl -p  指定其wsdl的命名空间,也就是要生成代码的包名: -d  指定要产生代码所在目录 -cl ...

  6. linux之SQL语句简明教程

    本教程参考http://www.1keydata.com/cn/sql/ 目的是让初学者了解linux下Mysql的操作,但是我仍想侧重于SQL语句的讲解 sql语句的学习将按照下图的流程: 当然在这 ...

  7. poj 1094 Sorting It All Out_拓扑排序

    题意:是否唯一确定顺序,根据情况输出 #include <iostream> #include<cstdio> #include<cstring> #include ...

  8. 【LeetCode练习题】Scramble String

    Scramble String Given a string s1, we may represent it as a binary tree by partitioning it to two no ...

  9. Uber上海公司被司机打上门

    “Uber上周的工资没有到账,司机们都急了.”9月13日,<IT时报>记者接到Uber司机爆料,称Uber(优步)拖欠工资,客服给的解释是银行系统对接问题,但多名司机赶往Uber上海公司咨 ...

  10. 消息内容定义XML

    <XML>     <Title>title</Title>     <ContentType>text/plain</ContentType&g ...