JavaScript 原型 prototype 使用经验
初始化一个父类,并添加方法
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 的使用经验,主要是判断实例是在重写原型之前定义,还是重写原型之后定义的;
- 重写原型会切断 原有实例 与 现有原型 的连接
- 重写原型会切断 现有实例 与 原有原型 的连接
记住一句话
实例中的指针仅指向原型,而不指向构造函数
JavaScript 原型 prototype 使用经验的更多相关文章
- javascript原型Prototype【转】
转自:http://www.cnblogs.com/starof/p/4190404.html 在javaScript创建对象一文中提到过:用构造函数创建对象存在一个问题即同一构造函数的不同实例的相同 ...
- javascript原型Prototype
在javaScript创建对象一文中提到过:用构造函数创建对象存在一个问题即同一构造函数的不同实例的相同方法是不一样的,所以我们用原型把构造函数中公共的属性和方法提取出来进行封装,达到让所有实例共享的 ...
- javascript原型prototype浅识
C++,java是基于类的语言,主要通过类来实现继承. javascript是基于原型的语言,通过原型来实现继承. 什么是原型?每种物质,都可以追根溯源,原型就是对象的根源.继承就是追根溯源. jav ...
- javascript原型prototype的一个你不一定知道的理解
原型和原型链的故事 相关文章: 为什么原型继承很重要 先来看看一段小代码用以引入要讲的小故事. function Foo() {}; var f1 = new Foo(); Foo.prototype ...
- javascript 原型(prototype 、__proto__、函数、对象)
一.类型 1.JavaScript中分为值类型(string/boolean/null/number/undefind).引用类型(数组.对象.函数): 2.数组.函数.对象都是对象: 对象是由函数创 ...
- 深入理解javascript原型和闭包(3)——prototype原型
既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的新朋友,我估计您也是javascript的新朋友. 在咱们的第一节(深入理解 ...
- 从mixin到new和prototype:Javascript原型机制详解
从mixin到new和prototype:Javascript原型机制详解 这是一篇markdown格式的文章,更好的阅读体验请访问我的github,移动端请访问我的博客 继承是为了实现方法的复用 ...
- javascript进阶-原型prototype
一.javascript原型认识 很多编程语言都有类的概念,我们可以拿原型和类进行比较,看看它们之间的区别以及相同点在哪里. 1.类:类是一个具体事物的抽象所以类是一个抽象的东西,在面向对象中类可以用 ...
- 悟透Javascript之 原型prototype
构造函数的Prototype上定义的方法确实可以通过对象直接调用,而且代码是共享的.我表示我不懂.太难理解了,艹.在Javascript中,prototype不但能让对象共享自己的财富,而且proto ...
随机推荐
- springboot配置springMVC
/** * @ClassName MvcConfigure * @Description SpringMVC配置 * @Author JAGNG * @Date 2019/10/28 10:23 ** ...
- poj 1001 求高精度幂(Java, BigDecimal, pow, hasNext, stripTrailingZeros, toPlainString)
求高精度幂 Time Limit: 500MS Memory Limit: 10000K Total Submissions: 180325 Accepted: 43460 Descripti ...
- C# Json之序列化与反序列化
前言:在实际开发过程中经常都要和Json打交道,序列化与反序列化就成了开发中必不可缺的技能.本篇博客就教大家如何进行Json序列化与反序列化. 首先要添加引用NuGet包,Newtonsoft.Jso ...
- 生成Alpine LXC容器的根文件系统
一个Alpine LXC容器的文件系统内容包括以下内容 根文件系统 应用程序,库文件以及配置文件 根文件系统主要包含alpine linux最小系统所需要的组件.下面主要讲一下制作根文件系统的方法. ...
- 18063-圈中的游戏-(第九章第4题)-"数组指针的使用"-数学分析
代码借鉴CSDN大佬https://blog.csdn.net/weixin_41409140/article/details/88071047(对大佬的大佬代码进行分析) 18063 圈中的游戏 时 ...
- Spring基于注解的配置1——@Required、@Autowired、@Qualifier示例及与传统注入方法的对比
@Required注释 作用:用于属性的set方法,那么这个属性必须在xml文件的bean标签里面进行配置,否则就会抛出一个BeanInitializationException异常. 首先准备一个类 ...
- 程序员实用工具,推荐一款代码统计神器GitStats
阅读全文需7分钟,工具很实用. 1. 前言 对于Git项目开发,有一些可视化的工具,如gitk,giggle等,来查看项目的开发历史.但对于大型的项目,这些简单的可视化工具远远不足以了解项目完整的开发 ...
- jQuery学习笔记3
* 动画效果 * 在一定的时间内, 不断改变元素样式 * slideDown()/slideUp()/slideToggle() * fadeOut()/fadeIn()/fadeToggle() * ...
- UiPath之获取邮件相关信息
大家好,小U又来给大家分享UiPath文章,争取每一篇文章都给大家带来满满的干货. 本次案例是告诉大家如何使用GetOutLookMailMessage这个Activity, 案例的目的是将某个特定人 ...
- ASP.NET Core 中的 ObjectPool 对象重用(二)
前言 上一篇文章主要介绍了ObjectPool的理论知识,再来介绍一下Microsoft.Extensions.ObjectPool是如何实现的. 核心组件 ObjectPool ObjectPool ...