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. 移动端zepto.js文件的构建

    因为在zepto的官网http://www.zeptojs.cn/#download下载的文件只包括了默认的几个模块,这并不能全部适应我们所需功 能,还需要按自己需要去添加相应模块.所以需要去构建我们 ...

  2. css3变形讲解

    Transform变形:可以实现文字或者图片旋转.缩放.倾斜和移动,并且该元素下的所有子元素都随着父元素一样. 既然接触到transform,我们就可以做好多3d的效果啦 旋转:transform:r ...

  3. Qt之QTemporaryFile(文件名唯一,且可以自动删除)

    简述 QTemporaryFile类是操作临时文件的I/O设备. QTemporaryFile用于安全地创建一个独一无二的临时文件.临时文件通过调用open()来创建,并且名称是唯一的(即:保证不覆盖 ...

  4. 【Mysql5.7数据目录和配置文件目录】

    Win7下 C:\ProgramData\MySQL\MySQL Server 5.7\ 如何查看mysql运行.访问记录等日志 1.首先确认你日志是否启用了mysql>show variabl ...

  5. inet address example(socket)

    package com.opensource.socket; import java.net.Inet4Address; import java.net.Inet6Address; import ja ...

  6. Web scraping with Python (part II) « Jean, aka Sig(gg)

    Web scraping with Python (part II) « Jean, aka Sig(gg) Web scraping with Python (part II)

  7. OC基础3:一些基本概念

    "OC基础"这个分类的文章是我在自学Stephen G.Kochan的<Objective-C程序设计第6版>过程中的笔记. 1.关于NSLog函数中的“%2i”: ( ...

  8. 依赖注入及AOP简述(五)——依赖注入的方式 .

    二.依赖注入的应用模式 前面我们了解了依赖注入的基本概念,也对一些依赖注入框架进行了简单的介绍,这一章我们主要来讨论作为开发者如何利用依赖注入框架来实现依赖注入的设计思想. 1.     依赖注入的方 ...

  9. ORACLE表空间bigfile和smallfile

    BIGFILE | SMALLFILE Use this clause to determine whether the tablespace is a bigfile or smallfile ta ...

  10. appium自动化测试

    appium官网:http://appium.io/index.html?lang=zh Requirements Your environment needs to be setup for the ...