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

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. Java基础:数组的声明,循环,赋值,拷贝。

    数组的声明 一般有两种形式的声明: int[] a; int a[]; 这两种声明都没错,但是大多数都使用第一种声明,因为变量名是独立的,不带任何符号. 声明一个数组,并没有将a真正的初始化为一个数组 ...

  2. Java基础:8种基本数据类型,取值范围和储存字节说明。

    Java中,一共有8种基本数据类型: 4种整数型:int,short,long,byte. 2种浮点型:float,double. 1种字符类型:char. 1种表示真值的类型:boolean. [S ...

  3. spark-Worker内部工作流程

  4. nyoj 45-棋盘覆盖 (高精度, Java)

    棋盘覆盖 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 在一个2k×2k(1<=k<=100)的棋盘中恰有一方格被覆盖,如图1(k=2时),现用一缺角的 ...

  5. W5500

    W5500 芯片是一款韩国全硬件TCP/IP协议栈以太网接口芯片,   最近发现我们国内也有和W5500 芯片一样芯片 介绍给大家 如下图 :

  6. C语言1博客作业06

    这个作业属于哪个课程 C语言程序设计II 这个作业的要求在哪里 https://www.cnblogs.com/sanying/p/11771502.html 我在这个课程的目标是 端正态度,认真对待 ...

  7. python:爬虫1——实战(下载一张图片、用Python模拟浏览器,通过在线的有道词典来对文本翻译)

    一.下载一只猫 import urllib.request response = urllib.request.urlopen("http://cdn.duitang.com/uploads ...

  8. 程序员修神之路--kubernetes是微服务发展的必然产物

    菜菜哥,我昨天又请假出去面试了 战况如何呀? 多数面试题回答的还行,但是最后让我介绍微服务和kubernetes的时候,挂了 话说微服务和kubernetes内容确实挺多的 那你给我大体介绍一下呗 可 ...

  9. HashMap的源码学习以及性能分析

    HashMap的源码学习以及性能分析 一).Map接口的实现类 HashTable.HashMap.LinkedHashMap.TreeMap 二).HashMap和HashTable的区别 1).H ...

  10. 网络爬虫一定要用代理IP吗

    数据采集现在已经成为大数据时代不可以缺少的一部分,在数据采集过程中,很多人都会用到代理ip,那么网络爬虫一定要用代理IP吗?答案虽然不是肯定的,但出现以下情况一定是需要用到代理IP的.1.在爬虫的时候 ...