JavaScript学习笔记(二)原型
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学习笔记(二)原型的更多相关文章
- Javascript学习笔记二——操作DOM
Javascript学习笔记 DOM操作: 一.GetElementById() ID在HTML是唯一的,getElementById()可以定位唯一的一个DOM节点 二.querySelector( ...
- JavaScript学习笔记之原型对象
本文是学习<JavaScript高级程序设计>第六章的笔记. JS中,便于批量创建对象的三种模式: 1.工厂模式:用一个函数封装创建对象的细节,传入必要的参数,在函数内部new一个对象并返 ...
- JavaScript学习笔记(二)——闭包、IIFE、apply、函数与对象
一.闭包(Closure) 1.1.闭包相关的问题 请在页面中放10个div,每个div中放入字母a-j,当点击每一个div时显示索引号,如第1个div显示0,第10个显示9:方法:找到所有的div, ...
- javascript学习随笔(二)原型prototype
JavaScript三类方法: 1.类方法:2.对象方法:3.原型方法;注意三者异同 例: function People(name){ this.name=name; //对象方法 this.Int ...
- javascript学习笔记二
1.js的string对象 **创建 String对象 *** var str = "abc"; **方法 和 属性(文档) *** 属性 length : 字符串的长度 ***方 ...
- javascript学习笔记(四) Number 数字类型
数字格式化方法toFixed().toExponential().toPrecision(),三个方法都四舍五入 toFixed() 方法指定小数位个数 toExponential() 方法 用科学 ...
- JavaScript学习笔记之数组(二)
JavaScript学习笔记之数组(二) 1.['1','2','3'].map(parseInt) 输出什么,为什么? ['1','2','3'].map(parseInt)//[1,NaN,NaN ...
- amazeui学习笔记二(进阶开发4)--JavaScript规范Rules
amazeui学习笔记二(进阶开发4)--JavaScript规范Rules 一.总结 1.注释规范总原则: As short as possible(如无必要,勿增注释):尽量提高代码本身的清晰性. ...
- Javascript学习笔记三——操作DOM(二)
Javascript学习笔记 在我的上一个博客讲了对于DOM的基本操作内容,这篇继续巩固一下对于DOM的更新,插入和删除的操作. 对于HTML解析的DOM树来说,我们肯定会时不时对其进行一些更改,在原 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
随机推荐
- Spring-----6、Spring3.0提供的Java配置管理
转载自:http://blog.csdn.net/hekewangzi/article/details/45646279
- JSP中Filter中访问Spring管理的beans
@Override public void init(FilterConfig filterConfig) { //unchecked = filterConfig.getInitParameter ...
- 在Javascript中使用String.startsWith和endsWith
在Javascript中使用String.startsWith和endsWith 在操作字符串(String)类型的时候,startsWith(anotherString)和endsWith(anot ...
- hdoj分类
http://blog.csdn.net/lyy289065406/article/details/6642573 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 ...
- webapi文档
webapi文档描述-swagger 最近做的项目使用mvc+webapi,采取前后端分离的方式,后台提供API接口给前端开发人员.这个过程中遇到一个问题后台开发人员怎么提供接口说明文档给前端开发人员 ...
- MVC 后台DataTable 前台遍历
/// <summary> /// 多级审批流展示 /// </summary> /// <returns></returns> public Acti ...
- JIT和程序的首次执行
由于C#源代码经过编译器编译生成的是IL代码,而IL是与CPU无关的机器语言.因此当程序运行于特定的CPU时,首先必须将IL转换成本地CPU指令,这正是JIT(Just-In-Time)编译器的任务. ...
- 以Qemu模拟Linux,学习Linux内核
文章名称:以Qemu模拟Linux,学习Linux内核作 者:five_cent文章地址:http://www.cnblogs.com/senix/archive/2013/02/21/29 ...
- 【测试Json的多空格问题】
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- Hadoop--Hadoop的机架感知
Hadoop的机架感知 Hadoop有一个“机架感知”特性.管理员可以手工定义每个slave数据节点的机架号.为什么要做这么麻烦的事情?有两个原因:防止数据丢失和提高网络性能. 为了防止数据丢 ...