我们先看看这样一段代码: 复制代码 代码如下: <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>
好,概念说清了,让我们看一下下面这些代码: 复制代码 代码如下: <script type="text/javascript"> var Person = function () { }; Person.prototype.Say = function () { alert("Person say"); } var p = new Person(); p.Say(); </script>
好,接下来,让我们看个更复杂的。 复制代码 代码如下: <script type="text/javascript"> var Person = function () { }; Person.prototype.Say = function () { alert("Person say"); } Person.prototype.Salary = 50000; var Programmer = function () { }; Programmer.prototype = new Person(); Programmer.prototype.WriteCode = function () { alert("programmer writes code"); }; Programmer.prototype.Salary = 500; var p = new Programmer(); p.Say(); p.WriteCode(); alert(p.Salary); </script>
我们来做这样的推导:
var p=new Programmer()可以得出p.__proto__=Programmer.prototype;