JavaScript面向对象 ~ 原型和继续(2)

原型链

什么是原型链

依据之前关于原型的学问(https://segmentfault.com/a/11…),逐渐引出了原型链的观点。通常对象都有原型,而在JavaScript中,万物皆对象,所以,原型也是对象,也具有原型,也就是原型的原型,云云下去,会组成一个对象序列,该组织即为原型链。如前面提到,实例对象经由过程 proto 接见原型。

那末,原型链什么时候到头呢?默许的原型链组织又是如何的呢?

通常运用组织函数,而且没有应用赋值要领修正原型的对象,则保存默许的原型链,该原型链经由过程 proto 一向向上接见必需终究到头,返回值 null。注重,这里说的是原型的值为null,需要与之前的属性查找准绳所说的没有该属性返回的是undefined辨别开来。

以一个简朴的组织函数为例,演示默许的原型链组织:

function Person(){}
var p = new Person();

当前实例对象 -> Person.prototype -> Object.prototype -> nll
能够在Google浏览器调试东西中检察

什么是原型式继续

经由过程修正(增添、删除等)原型链组织,使得实例对象具有原型链上的一切要领

函数的原型链

上面讲的是对象的原型链,那函数的原型链呢?

1、函数的组织函数

在js中,运用Function能够实例化函数对象,也就是说在js中,函数与一般对象一样,也是一个对象范例,所以函数能够

  • 运用对象的动态特征
  • 用组织函数建立函数
  • 建立其他对象
  • 唯一能够限制变量作用域的效果

2、Function的实例代码

var foo = new Function("参数一", "参数二", "...");
Function的参数满是字符串,它是将参数连接起来的函数
没有参数,示意空函数;
只要一个参数,示意函数体;
有N个参数,末了一个示意函数体,前面一切的都示意函数体的参数;

综上,new Function 在功能上与一般函数并没有二意。从下面的代码,也能够看出。

function foo(a, b){
  var sum = a + b;
  return sum;
}

var foo = new Function("a", "b", "var sum = a + b; return sum;");

3、函数的原型链
任何函数都是Function的实例,所以函数能够经由过程__proto__接见到其原型(Function.prototype)。原型也是一个对象,继续自Object.prototype。当前的原型链组织为:
fn -> Function.prototype -> Object.prototype -> null

    原文作者:默默
    原文地址: https://segmentfault.com/a/1190000017394195
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞