js中什么是原型链
此时原型对象(2)将包含一个指向原型对象(1)的指针,
再让原型对象(2)的实例等于原型对象(3),如此层层递进就构成了实例和原型的链条,这就是原型链的概念
原型链
每个构造函数都有原型对象,每个构造函数实例都包含一个指向原型对象的内部指针(proto),如果我们让第一个构造函数的原型对象等于第二个构造函数的实例,结果第一个构造函数的原型对象将包含一个指向第二个原型对象的指针,再然第三个原型对象等于第一个构造函数的实例,这样第三个原型对象也将包含指向第一个原型对象的指针,以此类推,就够成了实例于原型的链条,这就是原型链的基本概念
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作用域
在开发过程中,我们可能会出现控制器的嵌套,看下面这段代码:
<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中什么是原型链的详细内容,更多请关注其它相关文章!
上一篇: 用c语言求1到1000的同构数
下一篇: 可显示多种图形报表的php图片类
推荐阅读
-
php中,用echo调用JS函数,有什么问题?
-
在console中看到AJAX请求要用1.5S左右,如何去测试PHP代码中是哪一段比较费时间,用什么工具可以看到整个运行过程吗?
-
javascript - php 有什么函数是可以根据文件名称,来获取这个文件的全路径的吗?或者js 怎么获取文件的全路径?
-
php中什么是加密狗?
-
php中什么是pear?
-
JS高级---原型和原型链
-
为什么php中的*会匹配到null,是php的bug吗,还是其它语言也会这样?
-
js中块级作用域以及函数作用域之间有什么区别?(代码解析)
-
php 在一个类中new自己代表什么意思 ?是构造函数
-
JavaScript中什么是匿名函数?