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 ...
随机推荐
- 极·Java速成教程 - (1)
序言 众所周知,程序员需要快速学习新知识,所以就有了<21天精通C++>和<MySQL-从删库到跑路>这样的书籍,Java作为更"高级"的语言也不应该落后, ...
- 0MQ文档导读
1. 先结合RabbitMQ Tutorials,弄清0MQ socket的各种类型. 1.1. 0MQ PAIR 对应 RabbitMQ Tutorials的 "Hello world&q ...
- 在lldb调试中调用c++函数
在lldb调试时,调用oc对象的方法不足为奇,因为msgSend是有原型导出的,oc对象的方法都运行期绑定的,绑定信息都在objc_class中.只要在调试中[receiver sel]之类,lldb ...
- java课笔记
http://127.0.0.1:8088/ http://127.0.0.1:8088/test/index.jsp http://127.0.0.1:8088/test/show 用户 (请求) ...
- HDFS之DataNode
DataNode工作机制 1)一个数据块在datanode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳. 2)DataNode启动后 ...
- jquery对类的操作,添加,删除,点击添加,再点击删除
jquery对类的操作,添加(addClass),删除l类(remoceClass),点击添加,再点击删除(toggleClass)
- nginx实现前后台分离部署
2.1 前后台分离部署 (一) 组网图 (二) 简要说明: 如标题所示,至于为什么要前后台分离部署,个人理解的原因有三 (一) 便于部署 前台代码由ngin ...
- 数据表与简单java类映射转换
简单的Java类的定义来源于数据表的结构, 例如:雇员信息表.部门信息表描述的就是雇员或部门的信息, 在实际的开发之中,数据表和简单java类之间的映射关系如下: 1. 数据实体表设计 = 类的定义: ...
- insertBefore()
insertBefore()方法将把一个给定的节点插入到一个给定元素节点的给定子节点前面,他返回一个指向新增子节点的引用指针: reference = element.insertBefore(new ...
- k8s 上部署 Redis 三主三从 集群
目录 介绍 为什么要使用Redis? 什么是Redis群集? 在Kubernetes中部署Redis集群 从 GitHub 上下载: 创建pv 创建statefulset 创建service 初始化 ...