内容要点:

一.每一个JS对象(null除外)都和另一个对象相关联。"另一个"对象就是我们熟知的原型,每一个对象都从原型继承属性.

二.所有通过对象直接量创建的对象都具有同一个原型对象,并可以通过JS代码Object.prototype获得对原型对象的引用。

三.通过关键字new和构造函数调用创建的对象的 原型 就是 构造函数的prototype属性 的值。(见例9-2)

四.使用{}创建对象一样,通过new Object()创建的对象也继承自Object.prototype.

同样,通过new Array()创建的 实例对象的原型 就是Array.prototype, (Array,Date等都是JS内部构造函数)

通过new Date()创建的 实例对象的原型 就是Date.prototype.

五.

没有原型的对象为数不多,Object.prototype就是其中之一。它不继承任何属性。其他原型对象都是普通对象,普通对象都具有原型。

所有的内置构造函数(以及大部分自定义的构造函数)都具有一个继承自Object.prototype的原型。

例如:

Date.prototype的属性继承自Object.prototype,因此new Date()创建的Date对象的属性同时继承自Date.prototype和Object.prototype.

这一系列链接的原型对象就是所谓的"原型链"。

六.Object.create()

1.ECMAScript5定义了一个名为Object.create()的方法,它创建了一个新对象,其中第一个参数是这个对象的原型。Object.create()提供第二个可选参数,用以对对象的属性进行进一步描述.

2.

var o1=Object.create({x:1,y:2}); //o1继承了属性x和y

var o2=Object.create(null); //o2不继承任何属性和方法

var o3=Object.create(Object.prototype); //o3和{}和new Object()一样 可以通过任意原型创建新对象(换句话说,可以使任意对象可继承);

3.通过原型继承创建一个新对象

//inherit()返回了一个继承自原型对象p的属性的新对象

//这里使用ECMAScript 5中的Object.create()函数(如果存在的话)

//如果不存在Object.create(),则退化使用其他方法

function inherit(p){

if(p==null) throw TypeError(); //p是一个对象,不能为null

if(Object.create)                  //如果Object.create()存在,直接使用它,否则进一步检测

return Object.create(p);

var t=typeof p;

if(t!=="object" && t!=="function") throw TypeError();

function f(){};  //定义一个空构造函数

f.prototype=p;  //将其原型属性设置为p

return new f();  //使用f()创建p的继承对象

}

inherit()函数的其中一个用途就是防止库函数无意间(非恶意地)修改那些不受你控制的对象。

不是将对象直接作为参数传入函数,而是将它的继承对象传入函数。

当函数读取继承对象的属性时,实际上读取的是继承来的值。

如果给继承对象的属性赋值,则这些属性只会影响这个继承对象自身,而不是原始对象。

var o={x : "don't change this value"};

library_function(inherit(o));  //防止对o的意外修改

《JS权威指南学习总结--6.1原型》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. VirtualBox 主机与虚拟机互通

    文章转载:http://www.cnblogs.com/HD/p/4011323.html 网络要设置才能互通 注意:不启动Linux系统的时候,设置网络 使用VirtualBox的主机与虚拟机相互通 ...

  2. 关于preg_match()函数的一点小说明

    int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $ ...

  3. Qt 富文本处理

    富文本处理 所有的类围绕 QTextDocument 展开, 它保证了用户可以创建和修改 富文本块, 而无须定义中间语言.一个 QTextDocument 可以通过两个接口操作, 一个是用于编辑的 C ...

  4. C语言:XML学习

    说明:文章中代码是我参考别人的例子得来的. XML基础 一.XML的概念 Xml是一种可扩展标记语言.在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如 ...

  5. google的作恶与不作恶

    Google刚刚出现时,那时互联网还似桃花源,路不拾遗夜不闭户,最多升级升级病毒库.Google的发展,从商业模式上带来了广告对互联网无孔不入的渗透,如今Google.百度.阿里等各大巨头都有自己的广 ...

  6. 最简单的jdbc操作

    Connection con = null; Statement stmt = null; // 保存到表中 String sql = "insert into website(userna ...

  7. OBIEE 缓存机制

    1,EM下开关缓存和rpd中高速缓存是一件事,就是nqserver的缓存, 由nqsconfig.ini中配置决定cache是否开启. 当然rpd里面还需要设置,具体的表是否要缓存. 这部分可以看这篇 ...

  8. 导入spring源码到eclipse

    1.1安装Gradle 可以从http://www.gradle.org/downloads页面下载Gradle.下载后将文件解压到指定目录,我放在D:\软件\gradle-3.3,然后设置环境变量. ...

  9. html css jquery 回到顶部按钮

    今天做了个回到顶部的功能,在这里记录一下,有需要可以拿去试试! CSS部分,很简单就一个class /*回到顶部*/ .back-top { position: fixed; right: 15px; ...

  10. Attempt to write to field 'android.support.v4.app.FragmentManagerImpl android.support.v4.app.Fragment.mFragmentManager' on a null object reference

    E/AndroidRuntime﹕ FATAL EXCEPTION: mainProcess: org.example.magnusluca.drawertestapp, PID: 3624java. ...