javascript是以原型为基础的继承机制,不同于java、C#的以类为基础的原型机制。所以习惯了类继承的在理解原型继承的时候不是那么顺利。下面是2者的对比情况:
原型继承:
是以对象为原型来创建新对象的,复用的是对象。
类继承:
是类为模板的来创建新对象的,复用的是类。
javascript是最容易受人误解的语言之一,以原型继承,却因为追当时流行的面向对象语言的风引入了类继承机制语言中用的最广泛的 new关键字。按照我们的理解本来应该引入 create或者Clone,以一个原型对象为基础产生出新的对象。面向原型的继承的大致过程是这样,当我们创建一个新对象时,将这个对象的Prototype指向一个已经存在的对象。当我们访问这个新对象的属性时,如果自己没有这个属性,则沿着原型链向上查找,如果到最顶层仍不存在则返回undefined。当我们给这个对象的一个属性赋值时,不会沿着原型链查找,而是直接根据 haveownpropey 进行判断。如果自己没有则把属性加进来。这样看来原型集成类似于linux的进程机制的写时copy,节省了内存。
function p() { this.name = "name"; } function a(Y) { this.y = Y; this.calc = function() { //console.log(this.x + ";y=" + this.y ); //console.log("_____________________"); console.log(this.name); } } var pp = new p(); a.prototype = pp; var b = new a(10); var c = new a(20); b.calc(); c.calc(); pp.name = "change name"; //在这里我们修改了父对象的值,发现2个子对象的值都发生了改变,可以判断出2个对象是共享一个父对象的。 b.calc(); // change name c.calc();// change name
那么下一步,我们通过其中一个子对象来修改其值来观察一下。
b.name = "change name"; b.calc(); //change name c.calc(); //name 我们发现B的值发生了改变,C的值并没有发生变化。究竟底层是怎么实现的呢?是类似linux的写时copy。 还是发生了其他什么呢?
同步更新与:http://campoem.com/blog/2013/04/master-javascript-prototype/
相关推荐
深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaScript系列(3):全面解析Module模式 深入理解JavaScript系列(4):立即调用...
深入理解JavaScript深入理解JavaScript深入理解JavaScript
深入理解这一主题,对于任何JavaScript开发者来说都是至关重要的。在这个教程中,我们将探索JavaScript异步处理的各个方面,包括事件循环、回调函数、Promise、Async/Await以及generator等。 首先,我们来了解异步...
深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaScript系列(3):全面解析Module模式 深入理解JavaScript系列(4):立即调用...
深入理解Javascript系列
深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 深入理解JavaScript系列(2):揭秘命名函数表达式 深入理解JavaScript系列(3):全面解析Module模式 深入理解JavaScript系列(4):立即调用...
深入理解JavaScript(美)罗彻麦尔著.pdf
理解这两个概念,不仅能让我们更深层次地理解JavaScript,而且有助于我们了解编程语言的设计思路,拓宽我们的视野。 首先,关于“一切都是对象”的说法,这并不意味着JavaScript中所有内容都是对象。在JavaScript中...
《深入理解JavaScript》一书由美国作者罗彻麦尔撰写,是JavaScript编程领域的经典之作。本书旨在帮助读者全面、深入地掌握JavaScript这门强大的脚本语言,从而在Web开发领域中发挥出更大的潜力。 JavaScript,通常...
深入理解javascript原型和闭包(01)——一切都是对象 深入理解javascript原型和闭包(02)——函数和对象的关系
在这个深入理解的文章中,我们将探讨`this`在不同情况下的工作原理,包括函数调用、方法调用、构造函数调用以及箭头函数等场景。 1. 函数调用 在全局环境中,`this`默认指向全局对象,在浏览器中通常是`window`对象...
深入理解JavaScript编写要点,首要关注的是提高代码的可维护性,因为修复软件bug的成本会随时间增长,尤其是在软件发布后才显现的bug。为避免这种情况,开发者应当在发现问题时及时修复,保持对代码逻辑的清晰理解。...
深入理解JavaScript作用域
"深入理解JavaScript"这一主题涵盖了许多重要的概念和技术,包括基础语法、变量、数据类型、控制结构、函数、对象、原型链、闭包、异步编程、模块化和ES6+的新特性等。 首先,我们从基础开始。JavaScript的基本语法...
深入理解JavaScript和jQuery是Web开发中的重要课题,这两者都是前端开发者不可或缺的工具。JavaScript作为浏览器端的主要脚本语言,负责动态交互,而jQuery则是一个轻量级的库,极大地简化了JavaScript的DOM操作,...
本资料"深入理解JavaScript作用域共12页.pdf"将详细探讨这一主题。 在JavaScript中,作用域主要有两种类型:全局作用域和局部作用域。全局作用域的变量在整个脚本中都是可访问的,而局部作用域的变量只在其声明的...