优就业WEB教程-JavaScript之原型深入详解

合集下载

JavaScript教程及实例讲解模板

JavaScript教程及实例讲解模板

JavaScript教程及实例讲解㈠.JS简介及特点JavaScript语言的前身叫作Livescript。

自从Sun公司推出著名的Java语言之后,Netscape公司引进了Sun公司有关Java的程序概念,将自己原有的Livescript 重新进行设计,并改名为JavaScript。

JavaScript是一种基于对象和事件驱动并具有安全性能的脚本语言,有了JavaScript,可使网页变得生动。

使用它的目的是与HTML超文本标识语言、Java 脚本语言一起实现在一个网页中链接多个对象,与网络客户交互作用,从而可以开发客户端的应用程序。

它是通过嵌入或调入在标准的HTML语言中实现的。

JavaScript具有很多优点:1.简单性:-JavaScript是一种脚本编写语言,它采用小程序段的方式实现编程,像其它脚本语言一样,JavaScript同样已是一种解释性语言,它提供了一个简易的开发过程。

它的基本结构形式与C、C++、VB、Delphi十分类似。

但它不像这些语言一样,需要先编译,而是在程序运行过程中被逐行地解释。

它与HTML 标识结合在一起,从而方便用户的使用操作。

2.动态性:-JavaScript是动态的,它可以直接对用户或客户输入做出响应,无须经过Web服务程序。

它对用户的反映响应,是采用以事件驱动的方式进行的。

所谓事件驱动,就是指在主页中执行了某种操作所产生的动作,就称为“事件”。

比如按下鼠标、移动窗口、选择菜单等都可以视为事件。

当事件发生后,可能会引起相应的事件响应。

3.跨平台性:-JavaScript是依赖于浏览器本身,与操作环境无关,只要能运行浏览器的计算机,并支持JavaScript的浏览器就可以正确执行。

4.节省CGI的交互时间:-随着WWW的迅速发展有许WWW服务器提供的服务要与浏览者进行交流,确浏览的身份、需服务的内等等,这项工作通常由CGI/PERL编写相应的接口程序与用户进行交互来完成。

javascript工作原理

javascript工作原理

javascript工作原理JavaScript 是一种脚本编程语言,用于为网页添加交互性。

它的工作原理可以概括如下:1. 引入 JavaScript:在 HTML 文件中使用 `<script>` 标签引入JavaScript 代码。

可以将 JavaScript 代码嵌入到 HTML 文件中,也可以通过外部脚本文件进行引入。

2. 解析和执行:当浏览器加载 HTML 文件时,遇到 JavaScript 代码时会对其进行解析,并使用 JavaScript 引擎执行。

3. DOM 操作:JavaScript 可以通过文档对象模型(DOM)来与 HTML 文档进行交互。

它可以通过 JavaScript 代码来获取、修改或创建 HTML 元素。

4. 事件驱动:JavaScript 能够对用户的交互作出响应。

它可以通过事件监听器来捕获用户的交互事件(如点击、输入等),并执行预定的函数。

5. 数据操作:JavaScript 支持各种数据类型和操作,包括数字、字符串、布尔值、对象和数组等。

它可以进行算术运算、字符串拼接、条件判断、循环等操作,以完成复杂的计算和控制流程。

6. 异步操作:JavaScript 支持异步编程,可以通过回调函数、Promise 或者 async/await 等方式处理异步操作,如网络请求、定时器等。

7. 浏览器 API:JavaScript 可以通过浏览器提供的 API 来访问浏览器功能,如操作浏览器窗口、发送网络请求、使用本地存储等。

总之,JavaScript 的工作原理是通过解析和执行代码,与HTML 文档进行交互,并通过事件驱动、数据操作和浏览器API 来实现网页的交互性和动态性。

JavaScript原型和原型链深度剖析知识点

JavaScript原型和原型链深度剖析知识点

JavaScript原型和原型链深度剖析知识点JavaScript是一种基于对象的编程语言,它使用原型和原型链的概念来实现继承和共享属性。

了解JavaScript原型和原型链的工作原理对于深入理解JavaScript的核心概念至关重要。

在本文中,将对JavaScript原型和原型链进行深度剖析,以帮助读者更好地理解这一知识点。

一、JavaScript原型的概念JavaScript中的每一个对象都有一个原型(prototype),它是一个指向另一个对象或null的内部引用。

当我们访问一个对象的属性时,如果该属性不存在,JavaScript会沿着原型链向上查找,直到找到该属性或到达原型链的末尾(null)。

原型可以被视为一个对象的模板,它定义了该对象的共享属性和方法。

当我们创建一个新对象时,该对象会默认继承其构造函数的原型。

通过原型,我们可以实现属性和方法的共享,避免在每个实例中重复定义相同的属性和方法。

二、JavaScript的原型链原型链是一种机制,用于实现对象之间的继承关系。

每个JavaScript对象都有一个原型,而原型本身也是一个对象,它也有自己的原型。

这样构成的链状结构就是原型链。

原型链的最终目的是让我们能够在一个对象中访问另一个对象的属性和方法。

当我们访问一个对象的属性时,JavaScript会按照从下到上的顺序沿着原型链进行查找,直到找到相应的属性或到达原型链的末尾。

这样就实现了属性的继承。

三、原型链的构建过程原型链的构建过程可以简单地概括为以下几个步骤:1. 创建一个构造函数:通过构造函数创建一个对象实例,同时该实例会自动继承构造函数的原型。

2. 给原型添加属性和方法:我们可以通过构造函数的原型属性,为其添加属性和方法。

3. 创建另一个构造函数:通过创建另一个构造函数,我们可以将其原型指向第一个构造函数的实例,从而实现继承。

4. 继续添加属性和方法:通过第二个构造函数的原型,我们可以为其添加新的属性和方法。

JavaScript中的原型与继承机制

JavaScript中的原型与继承机制

JavaScript中的原型与继承机制JavaScript是一种特殊的面向对象编程语言。

它的对象模型不同于其他对象模型,比如Java和C++。

JavaScript的对象模型被称为原型模型。

它是一种非常灵活的模型,使得JavaScript在前端开发中非常流行。

在JavaScript中,对象是由构造函数创建的。

构造函数有一个原型对象,它是一个对象,其中包含了一些属性和方法。

这个原型对象被所有该构造函数创建的对象所共享。

这种原型继承机制是JavaScript中最重要的部分之一。

1. 基础原型和原型链在JavaScript中,每个对象都有一个隐藏的属性__proto__,它指向了该对象的原型。

当调用该对象的属性和方法时,如果该对象找不到这个属性或方法,它就会沿着原型链向上查找,直到找到这个属性或方法为止。

原型链就是这样一条链,它由一系列的原型对象组成,每个原型对象都可以有自己的原型对象。

这样,当一个属性或方法不存在于当前对象的属性中,就会沿着原型链向上查找,直到找到这个属性或方法为止。

JavaScript中的构造函数就是原型链的起点。

每个构造函数在创建对象时,都会创建一个原型对象。

这个原型对象可以包含一个或多个属性和方法。

当一个对象被创建时,它会自动获得该构造函数的原型对象中的所有属性和方法。

这就是原型继承的基础。

2. 继承继承是一种在JS中非常重要的机制。

如果一个对象需要继承自另一个对象的所有属性和方法,那么就需要使用继承机制。

在JavaScript中,可以用以下方式实现继承:- 原型继承原型继承是JavaScript中最灵活的继承方式之一。

在原型继承中,创建一个对象时,它的原型链会包括一个或多个原型对象。

这些原型对象包含某些属性或方法,子对象可以通过继承这些属性或方法,从而从父对象中得到它的功能。

使用原型继承时,需要注意不要改变原型对象本身,否则所有的子对象都将受到它的影响。

- 构造函数继承使用构造函数继承时,可以通过调用一个父对象的构造函数来创建一个子对象。

js原型用法 -回复

js原型用法 -回复

js原型用法-回复JS原型用法在JavaScript中,原型是面向对象编程中的一个重要概念。

它允许我们创建对象的模板,并且可以在需要时共享方法和属性。

通过原型,我们可以将方法和属性添加到一个对象,并且这些方法和属性可以被该对象的所有实例共享。

本文将详细介绍JavaScript原型的使用方式,并逐步回答以下问题:什么是原型?原型是如何工作的?如何使用原型来创建对象?如何修改和扩展原型?如何继承原型?如何重写原型的方法?最后,我们还将讨论原型链。

什么是原型?在JavaScript中,每个对象都有一个原型。

原型可以被视为该对象的模板,在模板中定义的方法和属性可以被该对象的所有实例访问和使用。

原型是通过JavaScript的原型链实现的。

原型是一个简单的JavaScript对象,它包含了要添加到实例中的方法和属性。

当我们创建一个对象时,该对象会自动获得原型的所有方法和属性。

当我们尝试访问一个对象上不存在的方法或属性时,JavaScript会查找该对象的原型,如果原型中存在该方法或属性,就会使用原型中的值。

原型是通过使用构造函数创建对象时自动创建的。

每个构造函数都有一个原型属性,用于存储原型的方法和属性。

我们可以通过构造函数的原型属性来访问对象的原型。

原型是如何工作的?在JavaScript中,当我们通过构造函数创建一个对象时,JavaScript会自动将该对象的原型设置为构造函数的原型。

这意味着通过构造函数创建的每个对象都会共享相同的原型。

我们可以通过以下步骤来理解原型的工作方式:1. 创建一个构造函数:function Person(name, age) { = name;this.age = age;}2. 创建一个对象:var john = new Person("John", 30);3. 查找属性:当我们尝试访问john对象的属性时,JavaScript首先会查找john对象上的属性。

JavaScript教案

JavaScript教案

JavaScript教案一、教案概述本教案旨在为初学者提供一套系统的JavaScript学习教材,匡助学习者掌握JavaScript基础知识和编程技巧。

通过本教案的学习,学员将能够理解JavaScript的基本概念、语法结构和常用操作,并能够运用JavaScript开辟简单的交互式网页。

二、教学目标1. 理解JavaScript的作用和优势;2. 掌握JavaScript的基本语法和常用操作;3. 能够运用JavaScript实现简单的页面交互效果;4. 培养学员的编程思维和解决问题的能力。

三、教学内容1. JavaScript简介1.1 JavaScript的定义和作用1.2 JavaScript与其他前端技术的关系1.3 JavaScript的优势和应用领域2. JavaScript基础语法2.1 变量和数据类型2.1.1 声明变量2.1.2 数据类型的分类和转换2.2 运算符和表达式2.2.1 算术运算符2.2.2 比较运算符2.2.3 逻辑运算符2.3 条件语句和循环语句2.3.1 if语句2.3.2 switch语句2.3.3 for循环和while循环 2.4 函数和对象2.4.1 函数的定义和调用2.4.2 对象的创建和属性访问3. JavaScript DOM操作3.1 DOM简介3.2 DOM元素的获取和操作3.2.1 通过ID获取元素3.2.2 通过标签名获取元素 3.2.3 通过类名获取元素3.3 DOM事件处理3.3.1 事件的绑定和触发3.3.2 常见事件类型和事件处理函数4. JavaScript实践4.1 表单验证4.1.1 检查输入是否为空4.1.2 检查输入是否符合要求4.2 图片轮播效果4.2.1 切换图片显示4.2.2 自动播放和手动控制4.3 动态加载数据4.3.1 通过AJAX获取数据4.3.2 动态更新页面内容四、教学方法1. 授课讲解:通过讲解理论知识、示范代码和实例演示,向学员介绍JavaScript的基本概念和语法结构。

JavaScript教案

JavaScript教案

JavaScript最新教案第一章:JavaScript简介1.1 课程目标了解JavaScript的历史和发展掌握JavaScript的基本概念和特点理解JavaScript在Web开发中的作用1.2 教学内容JavaScript的起源和发展JavaScript的语法和特点JavaScript的核心概念JavaScript在现代Web开发中的应用1.3 教学方法讲解和演示示例代码和练习互动讨论和问题解答1.4 教学资源教案和演示文稿示例代码和练习题在线资源和参考资料1.5 教学评估课堂参与和讨论练习题和代码实现项目评估和反馈第二章:JavaScript基础语法2.1 课程目标掌握JavaScript的基本语法和结构理解变量、数据类型和运算符的使用学会使用控制结构和函数2.2 教学内容JavaScript的基本语法和结构变量和数据类型的定义和使用运算符的种类和功能控制结构的作用和实现函数的定义和调用2.3 教学方法讲解和演示示例代码和练习互动讨论和问题解答2.4 教学资源教案和演示文稿示例代码和练习题在线资源和参考资料2.5 教学评估课堂参与和讨论练习题和代码实现项目评估和反馈第三章:JavaScript对象和数组3.1 课程目标理解对象的概念和作用掌握对象的创建和属性的操作学会使用数组和字符串的处理方法3.2 教学内容对象的概念和作用创建对象和使用构造函数属性和属性的操作数组的概念和操作方法字符串的处理和操作3.3 教学方法讲解和演示示例代码和练习互动讨论和问题解答3.4 教学资源教案和演示文稿示例代码和练习题在线资源和参考资料3.5 教学评估练习题和代码实现项目评估和反馈第四章:JavaScript事件处理4.1 课程目标理解事件的概念和作用掌握事件处理的方法和技巧学会使用事件监听器和事件委托4.2 教学内容事件的概念和作用事件处理的方法和技巧事件监听器的使用和实现事件委托的原理和应用4.3 教学方法讲解和演示示例代码和练习互动讨论和问题解答4.4 教学资源教案和演示文稿示例代码和练习题在线资源和参考资料4.5 教学评估练习题和代码实现项目评估和反馈第五章:JavaScript高级应用5.1 课程目标掌握JavaScript的高级特性学会使用ES6和ES7的新特性理解模块化和组件化的开发模式5.2 教学内容JavaScript的高级特性ES6和ES7的新特性模块化的概念和实现组件化的开发模式和应用5.3 教学方法讲解和演示示例代码和练习互动讨论和问题解答5.4 教学资源教案和演示文稿示例代码和练习题在线资源和参考资料5.5 教学评估练习题和代码实现项目评估和反馈第六章:JavaScript DOM操作6.1 课程目标理解DOM的概念和结构掌握DOM的查询和修改方法学会使用DOM事件处理和动画6.2 教学内容DOM的概念和结构DOM的查询方法(getElementById, getElementsByClassName, querySelector等)DOM的修改方法(添加、删除、修改元素和属性)DOM事件处理(事件监听器、事件流、事件对象)DOM动画的实现(transition, animation等)6.3 教学方法讲解和演示示例代码和练习互动讨论和问题解答6.4 教学资源教案和演示文稿示例代码和练习题6.5 教学评估课堂参与和讨论练习题和代码实现项目评估和反馈第七章:JavaScript网络请求7.1 课程目标理解网络请求的概念和原理掌握JavaScript中网络请求的实现学会使用协议和REST API7.2 教学内容网络请求的概念和原理JavaScript中的网络请求(XMLHttpRequest, Fetch API)协议的基本概念和状态码REST API的设计原则和实现7.3 教学方法讲解和演示示例代码和练习互动讨论和问题解答7.4 教学资源教案和演示文稿示例代码和练习题7.5 教学评估课堂参与和讨论练习题和代码实现项目评估和反馈第八章:JavaScript模块化和打包8.1 课程目标理解模块化的概念和优势掌握JavaScript模块化的实现学会使用打包工具和构建流程8.2 教学内容模块化的概念和优势JavaScript模块化的实现(CommonJS, ES6模块)打包工具的使用(Webpack, Parcel, Rollup)构建流程和自动化(Gulp, Grunt, npm scripts)8.3 教学方法讲解和演示示例代码和练习互动讨论和问题解答8.4 教学资源教案和演示文稿示例代码和练习题8.5 教学评估课堂参与和讨论练习题和代码实现项目评估和反馈第九章:JavaScript前端框架9.1 课程目标理解前端框架的概念和作用掌握常见前端框架的使用学会前端框架的原理和扩展9.2 教学内容前端框架的概念和作用常见前端框架(React, Vue, Angular)的使用和比较前端框架的原理和扩展(组件化、状态管理等)9.3 教学方法讲解和演示示例代码和练习互动讨论和问题解答9.4 教学资源教案和演示文稿示例代码和练习题在线资源和参考资料9.5 教学评估课堂参与和讨论练习题和代码实现项目评估和反馈第十章:JavaScript项目实践10.1 课程目标理解项目实践的重要性掌握项目开发的流程和技巧完成一个简单的JavaScript项目10.2 教学内容项目实践的重要性项目开发的流程和技巧(需求分析、设计、编码、测试)完成一个简单的JavaScript项目(如待办事项列表、天气应用等)10.3 教学方法讲解和演示示例代码和练习互动讨论和问题解答10.4 教学资源教案和演示文稿示例代码和练习题在线资源和参考资料10.5 教学评估课堂参与和讨论练习题和代码实现项目评估和反馈重点和难点解析一、JavaScript简介1.1 重点和难点解析JavaScript的历史和发展JavaScript的基本概念和特点JavaScript在Web开发中的作用二、JavaScript基础语法2.1 重点和难点解析变量和数据类型的定义和使用运算符的种类和功能控制结构的作用和实现函数的定义和调用三、JavaScript对象和数组3.1 重点和难点解析对象的概念和作用创建对象和使用构造函数属性和属性的操作数组的概念和操作方法字符串的处理和操作四、JavaScript事件处理4.1 重点和难点解析事件的概念和作用事件处理的方法和技巧事件监听器的使用和实现事件委托的原理和应用五、JavaScript高级应用5.1 重点和难点解析JavaScript的高级特性ES6和ES7的新特性模块化的概念和实现组件化的开发模式和应用六、JavaScript DOM操作6.1 重点和难点解析DOM的概念和结构DOM的查询方法DOM的修改方法DOM事件处理和动画七、JavaScript网络请求7.1 重点和难点解析网络请求的概念和原理JavaScript中的网络请求协议和REST API八、JavaScript模块化和打包8.1 重点和难点解析模块化的概念和优势JavaScript模块化的实现打包工具和构建流程九、JavaScript前端框架9.1 重点和难点解析前端框架的概念和作用常见前端框架的使用和比较前端框架的原理和扩展十、JavaScript项目实践10.1 重点和难点解析项目实践的重要性项目开发的流程和技巧完成一个简单的JavaScript项目全文总结和概括:本文针对“JavaScript最新教案”的十个章节进行了重点和难点的解析。

JavaScript:最容易理解的原型链讲解(荐)

JavaScript:最容易理解的原型链讲解(荐)

JavaScript:最容易理解的原型链讲解(荐)原型链一直是个很抽象的概念,看不到,摸不着.随着最近对JavaScript进一步的学习,我对原型链有了一点理解,下面讲出来.基础知识在JavaScript中,一共有两种类型的值,原始值和对象值.每个对象都有一个内部属性[[prototype]],我们通常称之为原型.原型的值可以是一个对象,也可以是null.如果它的值是一个对象,则这个对象也一定有自己的原型.这样就形成了一条线性的链,我们称之为原型链.访问一个对象的原型可以使用ES5中的Object.getPrototypeOf 方法,或者ES6中的__proto__属性.原型链的作用是用来实现继承,比如我们新建一个数组,数组的方法就是从数组的原型上继承而来的.var arr = [];arr.map === Array.prototype.map //arr.map是从arr.__proto__上继承下来的,arr.__proto__也就是Array.prototype图形化原型链虽然我们都说原型链,但实际上,在不考虑网页中frame的情况,js引擎在执行期间的某一时刻,所有存在的对象组成的是一棵原型树.默认情况下,只有一棵树.根节点可以说是Object.prototype,也可以说是null.但我们可以再建立一棵原型树,通过使用Object.create方法var foo = Object.create(null); //foo是一个对象,但它是游离的,不属于已有的那棵原型树var bar = Object.create(foo); //bar的原型是foovar baz = Object.create(foo); //baz的原型是foo这样我们有了第二棵原型树遍历原型链我们没有办法遍历到所有以某个对象为原型的对象,但我们可以向上遍历,获取到一个对象所有的上层原型,这个原型链必定是线性的,尽头是null.function getPrototypeChain(object) {var protoChain = [];while (object = object.__proto__) {protoChain.push(object);}protoChain.push(null);return protoChain;}试验一下,不同的环境实现不同,显示形式也不同.下面是在chrome 控制台中的显示.>getPrototypeChain(new String(""))[String, Object, null] //依次是String.prototype,Object.prototype,null>getPrototypeChain(function(){})[function Empty() {}, Object, null] //依次是Function.prototype,Object.prototype,null内置类型的对象的原型链并不长,下面试试宿主对象.>getPrototypeChain(document.createElement("div"))[HTMLDivElement, HTMLElement, Element, Node, Object, null]这个就长多了.超长原型链可以看出来,我们平时使用的对象并没有很长的原型链.但可以自己构造一个.function Foo() {}for (var i = 0; i < 100; i++) {Foo.prototype["foo" + i] = i;Foo.prototype = new Foo;}console.dir(getPrototypeChain(new Foo)); 最后的这个new Foo有多少个上层原型呢?。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

优就业WEB教程-JavaScript之原型深入详解
理解原型
原型是一个对象,其他对象可以通过它实现属性继承。

任何一个对象都可以成为继承,所有对象在默认的情况下都有一个原型,因为原型本身也是对象,所以每个原型自身又有一个原型。

任何一个对象都有一个prototype的属性,记为:__proto__。

每当我们定义一个对象,其__proto__属性就指向了其prototyp e。

示例如下:
var foo = {
x: 10,
y: 20
};
即使我们不指定prototype,该属性也会预留。

如果我们有明确指向的话,那么链表就连起来了。

需要注意的是,prototype自己也有指向,就是最高级的object.prototype。

示例如下:
var a = {
x: 10,
calculate: function (z) { return this.x + this.y + z }
};
var b = {
y: 20,
__proto__: a
};
var c = {
y: 30,
__proto__: a
};
// call the inherited method
b.calculate(30); // 60
使用原型
理解了原型的原理之后,如何使用原型呢?或者说原型有什么作用呢?
一般的初学者,在刚刚学习了基本的javascript语法后,都是通过面向函数来编程的。

如下代码:
var decimalDigits = 2,
tax = 5;
function add(x, y) {
return x + y;
}
function subtract(x, y) {
}
//alert(add(1, 3));
通过执行各个函数来得到最后的结果。

但是利用原型,我们可以优化一些我们的代码,使用构造函数:
首先,函数本体中只存放变量:
var Calculator = function (decimalDigits, tax) {
this.decimalDigits = decimalDigits;
this.tax = tax;
};
其具体的方法通过prototype属性来设置:
Calculator.prototype = {
add: function (x, y) {
},
subtract: function (x, y) {
return x - y;
}
};
//alert((new Calculator()).add(1, 3));
这样就可以通过实例化对象后进行相应的函数操作。

这也是一般的js框架采用的方法。

原型还有一个作用就是用来实现继承。

首先,定义父对象:
var BaseCalculator = function() {
this.decimalDigits = 2;
};
BaseCalculator.prototype = {
add: function(x, y) {
return x + y;
},
subtract: function(x, y) {
return x - y;
}
};
然后定义子对象,将子对象的原型指向父元素的实例化:var Calculator = function () {
//为每个实例都声明一个税收数字
this.tax = 5;
};
Calculator.prototype = new BaseCalculator();
我们可以看到Calculator的原型是指向到BaseCalculator的一个实例上,目的是让Calculator集成它的add(x,y)和subtract(x,y)这2个function,还有一点要说的是,由于它的原型是BaseCalculator的一个实例,所以不管你创建多少个Calculator对象实例,他们的原型指向的都是同一个实例。

上面的代码,运行以后,我们可以看到因为Calculator的原型是指向Base Calculator的实例上的,所以可以访问他的decimalDigits属性值,那如果我不想让Calculator访问BaseCalculator的构造函数里声明的属性值,那怎么办呢?只需要将Calculator指向BaseCalculator的原型而不是实例就行了。

代码如下:
var Calculator = function () {
this.tax= 5;
};
Calculator.prototype = BaseCalculator.prototype;
在使用第三方库的时候,有时候他们定义的原型方法不能满足我们的需要,我们就可以自己添加一些方法,代码如下:
//覆盖前面Calculator的add() function
Calculator.prototype.add = function (x, y) {
return x + y + this.tax;
};
var calc = new Calculator();
alert(calc.add(1, 1));
原型链
对象的原型指向对象的父,而父的原型又指向父的父,这种原型层层的关系,叫做原型链。

在查找一个对象的属性时,javascript会向上遍历原型链,直到找到给定名称的属性为止,当查找到达原型链的顶部,也即是Object.prototype,仍然没有找到指定的属性,就会返回undefined。

示例如下:
function foo() {
this.add = function (x, y) {
return x + y;
}
}
foo.prototype.add = function (x, y) { return x + y + 10;
}
Object.prototype.subtract = function (x, y) { return x - y;
}
var f = new foo();
alert(f.add(1, 2)); //结果是3,而不是13
alert(f.subtract(1, 2)); //结果是-1
我们可以发现,subtrace是按照向上找的原则,而add则出了意外。

原因就是,属性在查找的时候是先查找自身的属性,如果没有再查找原型。

说到Object.prototype,就不得不提它的一个方法,hasOwnProperty。

它能判断一个对象是否包含自定义属性而不是原型链上的属性,它是javascript 中唯一一个处理属性但是不查找原型链的函数。

使用代码如下:
// 修改Object.prototype
Object.prototype.bar = 1;
var foo = {goo: undefined};
foo.bar; // 1
'bar' in foo; // true
foo.hasOwnProperty('bar'); // false
foo.hasOwnProperty('goo'); // true
而为了判断prototype对象和某个实例之间的关系,又不得不介绍isProto tyleOf方法,演示如下:
alert(Cat.prototype.isPrototypeOf(cat2)); //true。

相关文档
最新文档