理解JS中的new

Author : lovecicy

上个月居然一篇文章都没发,罪过罪过,先补上一篇。 先来两句玩笑话: JavaScript和Java的关系就好像雷锋和雷峰塔的关系 我对JavaScript既爱又恨,它的优秀之处并非原创,它的原创之处并不优秀…… Brendan Eich 先来理解下第一句话:JS不是一门面向对象的语言,它是一种弱类型的脚本语言。但是它却采用了面向对象的思想,使用了new这个关键字。 第二句话,纯属好玩 ~(≧▽≦)/~ 好吧,言归正传,我们来聊一聊new的时候,到底发生了什么。先来看看下面这段代码: 总结来说,可以分为三个步奏,如下所示: 1. 创建一个空对象 首先,JS会创建一个空对象,将我们的变量指向这个空对象。这一步很简单,也很容易理解。 2. 修改proto属性 接着,将新对象的__proto__属性指向构造方法的prototype属性。这样,就可以通过原型链的方式访问原型对象中的属性和方法了。如果构造方法的prototype属性不是对象,那么就用Object.prototype对象替代。 3. 执行构造函数 最后一步,执行构造函数即Base()方法,并通过.call()方法,将新的对象传入,作[Read More]

standard

JavaScript 原型链 __proto__ prototype

Author : lovecicy

说到prototype,就不得不先说下new的过程。 我们先看看这样一段代码: <script type=”text/javascript”> var Person = function () { }; var p = new Person(); script> 很简单的一段代码,我们来看看这个new究竟做了什么?我们可以把new的过程拆分成以下三步: <1> var p={}; 也就是说,初始化一个对象p。 <2> p.__proto__=Person.prototype; <3> Person.call(p);也就是说构造p,也可以称之为初始化p。 关键在于第二步,我们来证明一下: <script type=”text/javascript”> var Person = function () { }; var p = new Person(); alert(p.__proto__ === Person.prototype); script> 这段代码会返回tru[Read More]

standard