js中什么是原型链


本文摘自PHP中文网,作者anonymity,侵删。

每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含指向原型对象内部的指针。我们让原型对象的实例(1)等于另一个原型对象(2),

此时原型对象(2)将包含一个指向原型对象(1)的指针,

再让原型对象(2)的实例等于原型对象(3),如此层层递进就构成了实例和原型的链条,这就是原型链的概念

原型链

每个构造函数都有原型对象,每个构造函数实例都包含一个指向原型对象的内部指针(proto),如果我们让第一个构造函数的原型对象等于第二个构造函数的实例,结果第一个构造函数的原型对象将包含一个指向第二个原型对象的指针,再然第三个原型对象等于第一个构造函数的实例,这样第三个原型对象也将包含指向第一个原型对象的指针,以此类推,就够成了实例于原型的链条,这就是原型链的基本概念

1

2

3

4

5

6

7

8

9

10

11

12

13

14

function One(){

 }

 function Two(){

 }

 function Three(){

 }

 Two.prototype=new One();

 Three.prototype=new Two();

 var three=new Three();

 console.log(three);

 console.log(three.__proto__===Three.prototype) //true

 console.log(three.__proto__.__proto__===Two.prototype) //true

 console.log(three.__proto__.__proto__.__proto__===One.prototype)  //true

 console.log(three.__proto__.__proto__.__proto__.__proto__===Object.prototype)  //true

在对象实例中,访问对象原型的方法

1、使用proto属性

此属性是浏览器支持的一个属性,并不是ECMAScript里的属性

2.Object.getPrototypeOf

3.使用constructor.prototype的方法

对于不支持proto的浏览器,可以使用constructor,访问到对象的构造函数,在用prototype访问到原型

使用原型链解释ANUGLAR作用域

在开发过程中,我们可能会出现控制器的嵌套,看下面这段代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

<div ng-controller="OuterCtrl">

      <span>{{a}}</span>

       <div ng-controller="InnerCtrl">

          <span>{{a}}</span>

       </div>

   </div>

  <script>

  function OuterCtrl($scope) {

  $scope.a = 1;

  }

  function InnerCtrl($scope) {

  }

  </script>

我们可以看到界面显示了两个1,而我们只在OuterCtrl的作用域里定义了a变量,但界面给我们的结果是,两个a都有值,现在自控制器里的a是从父控制器里继承过来的

我们可以父子级的作用域看成两个原型对象,其中一个原型对象继承另一个原型对象的实例

以上就是js中什么是原型链的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

ie怎么设置javascript

dom节点 vs 元素,两者有什么区别?

javascript函数是什么

如何实现网页标题闪烁效果

javascript怎样修改div内容

javascript采用什么方式继承

了解javascript中3种for循环风格以及何时使用它们

javascript中的运算符有哪些

javascript如何隐藏下拉菜单

javascript可以写在body里吗

更多相关阅读请进入《javascript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...