初始化一个父类,并添加方法

1function Foo(){}
2Foo.prototype.sayName = function(){
3    return '初始原型';
4}
5
6var foo1 = new Foo();
7foo1.sayName() //'初始原型'

new方式重写原型;切断了新实例与原有原型之间的连接

 1function Bar(){}
2Foo.prototype = new Bar(); // 重写原型
3var foo2 = new Foo();
4foo2.sayName();            // error 报错;找不到这个方法
5
6Bar.prototype.sayName = function(){
7    return '第一次重写的原型';
8}
9
10// 动态
11foo2.sayName() // '第一次重写的原型'
12var foo3 = new Foo();
13foo3.sayName() // '第一次重写的原型'

覆盖重写原型后定义的方法

1Foo.prototype.sayName = function(){
2    return '覆盖了新原型的方法'
3}
4
5var foo4 = new Foo();
6foo4.sayName() // '覆盖了新原型的方法'

覆盖原型的方法,并不影响其他实例调用这个方法;

 1// 其他实例还会继续调用(覆盖前)原来的那个方法
2var bar = new Bar();
3bar.sayName() // '第一次重写的原型'
4
5// 对象字面量方式会重写原型对象; 切断了新实例与原有原型的连接
6Foo.prototype = {
7    getHeight: function(){
8        return '高度是2m'
9    },
10    getWeight: function(){
11        return '重量是1kg'
12    }
13}
14// 相当于 Foo.property = new Object(); 然后再定义方法...
15
16var foo5 = new Foo();
17foo5.sayName() // error报错;找不到这个方法
18// 但原有的实例 还是能连接到 原有的原型
19foo4.sayName() //'覆盖了新原型的方法'
20
21// 此时
22Foo.prototype.__proto__ == Object.prototype // true

prototype 的使用经验,主要是判断实例是在重写原型之前定义,还是重写原型之后定义的;

  1. 重写原型会切断 原有实例 与 现有原型 的连接
  2. 重写原型会切断 现有实例 与 原有原型 的连接

记住一句话

实例中的指针仅指向原型,而不指向构造函数

JavaScript 原型 prototype 使用经验的更多相关文章

  1. javascript原型Prototype【转】

    转自:http://www.cnblogs.com/starof/p/4190404.html 在javaScript创建对象一文中提到过:用构造函数创建对象存在一个问题即同一构造函数的不同实例的相同 ...

  2. javascript原型Prototype

    在javaScript创建对象一文中提到过:用构造函数创建对象存在一个问题即同一构造函数的不同实例的相同方法是不一样的,所以我们用原型把构造函数中公共的属性和方法提取出来进行封装,达到让所有实例共享的 ...

  3. javascript原型prototype浅识

    C++,java是基于类的语言,主要通过类来实现继承. javascript是基于原型的语言,通过原型来实现继承. 什么是原型?每种物质,都可以追根溯源,原型就是对象的根源.继承就是追根溯源. jav ...

  4. javascript原型prototype的一个你不一定知道的理解

    原型和原型链的故事 相关文章: 为什么原型继承很重要 先来看看一段小代码用以引入要讲的小故事. function Foo() {}; var f1 = new Foo(); Foo.prototype ...

  5. javascript 原型(prototype 、__proto__、函数、对象)

    一.类型 1.JavaScript中分为值类型(string/boolean/null/number/undefind).引用类型(数组.对象.函数): 2.数组.函数.对象都是对象: 对象是由函数创 ...

  6. 深入理解javascript原型和闭包(3)——prototype原型

    既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的新朋友,我估计您也是javascript的新朋友. 在咱们的第一节(深入理解 ...

  7. 从mixin到new和prototype:Javascript原型机制详解

    从mixin到new和prototype:Javascript原型机制详解   这是一篇markdown格式的文章,更好的阅读体验请访问我的github,移动端请访问我的博客 继承是为了实现方法的复用 ...

  8. javascript进阶-原型prototype

    一.javascript原型认识 很多编程语言都有类的概念,我们可以拿原型和类进行比较,看看它们之间的区别以及相同点在哪里. 1.类:类是一个具体事物的抽象所以类是一个抽象的东西,在面向对象中类可以用 ...

  9. 悟透Javascript之 原型prototype

    构造函数的Prototype上定义的方法确实可以通过对象直接调用,而且代码是共享的.我表示我不懂.太难理解了,艹.在Javascript中,prototype不但能让对象共享自己的财富,而且proto ...

随机推荐

  1. hdu 1166 敌兵布阵 (线段树、单点更新)

    敌兵布阵Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...

  2. nyoj 524-A-B Problem (java stripTrailingZeros, toPlainString)

    524-A-B Problem 内存限制:64MB 时间限制:1000ms 特判: No 通过数:2 提交数:4 难度:3 题目描述: A+B问题早已经被大家所熟知了,是不是很无聊呢?现在大家来做一下 ...

  3. (二十九)golang--map

    map:是key-value数据结构,又称为字段或者关联数组,类似其它编程语言的集合: 基本语法:var 名称 map[键类型]值类型 key的类型可以是:bool.数字.string.指针.管道,还 ...

  4. 力扣(LeetCode)2的幂 个人题解

    给定一个整数,编写一个函数来判断它是否是 2 的幂次方. 示例 1: 输入: 1 输出: true 解释: 20 = 1 示例 2: 输入: 16 输出: true 解释: 24 = 16 示这题是考 ...

  5. Python3安装mysql模块

    pip3 install mysql 1.错误1 原因:在 Python 3.x 版本后,ConfigParser.py 已经更名为 configparser.py 所以出错! 解决,将模块cp一份为 ...

  6. php5.6开启curl

    1.   打开php安装目录,打开ext目录,是否有php_curl.dll扩展文件,如果没有该扩展文件,请在网上下载此文件. 2.   打开php.ini,找到  ;extension=php_cu ...

  7. django post请求

    django中提交post请求时候,需要携带CSRF,否则会报403错误,此时需要在form中添加{% csrf_token %} 或者注释掉settings.py -> MIDDLEWARE ...

  8. spring 工具类大集合

    接以前的文章 apache-commons 常用工具类 和文章 apache-commons 工具类扩展 小家 Spring 对 spring 的工具类做了详细的介绍(一) 这里我抽出一些好用的类,不 ...

  9. JVM的内存回收机制

    垃圾回收机制,简称gc.对堆与方法区的对象进行回收,因为java不像c需要编程人员手动clear,虚拟机通过垃圾回收算法,对堆与方法区的对象进行自动回收处理. 1.引用计数法(jvm没有采用,因为当两 ...

  10. H3C交换机DHCP基础配置案例 v7版本

    一.需求 要求在Switch A上配置DHCP服务器功能实现:• 为网络内的客户端动态分配 10.1.1.0/24 网段内的 IP 地址.租用有效期限. DNS 信息.网关地址等配置信息:• 根据 S ...