资讯专栏INFORMATION COLUMN

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

boredream / 2318人阅读

摘要:如前面提到,实例对象通过访问原型。那么,原型链什么时候到头呢默认的原型链结构又是怎样的呢凡是使用构造函数,并且没有利用赋值方法修改原型的对象,则保留默认的原型链,该原型链通过一直向上访问必须最终到头,返回值。原型也是一个对象,继承自。

原型链 什么是原型链

根据之前关于原型的知识(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://www.ucloud.cn/yun/100105.html

相关文章

  • 面向对象JavaScript

    摘要:是完全的面向对象语言,它们通过类的形式组织函数和变量,使之不能脱离对象存在。而在基于原型的面向对象方式中,对象则是依靠构造器利用原型构造出来的。 JavaScript 函数式脚本语言特性以及其看似随意的编写风格,导致长期以来人们对这一门语言的误解,即认为 JavaScript 不是一门面向对象的语言,或者只是部分具备一些面向对象的特征。本文将回归面向对象本意,从对语言感悟的角度阐述为什...

    novo 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    李昌杰 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    Lyux 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    AaronYuan 评论0 收藏0
  • 重新认识JavaScript面向对象: 从ES5到ES6

    摘要:基于原型的面向对象在基于原型的语言中如并不存在这种区别它只有对象不论是构造函数,实例,原型本身都是对象。允许动态地向单个的对象或者整个对象集中添加或移除属性。为了解决以上两个问题,提供了构造函数创建对象的方式。 showImg(https://segmentfault.com/img/remote/1460000013229218); 一. 重新认识面向对象 1. JavaScript...

    VishKozus 评论0 收藏0
  • 重新认识JavaScript面向对象: 从ES5到ES6

    摘要:基于原型的面向对象在基于原型的语言中如并不存在这种区别它只有对象不论是构造函数,实例,原型本身都是对象。允许动态地向单个的对象或者整个对象集中添加或移除属性。为了解决以上两个问题,提供了构造函数创建对象的方式。 showImg(https://segmentfault.com/img/remote/1460000013229218); 一. 重新认识面向对象 1. JavaScript...

    用户83 评论0 收藏0

发表评论

0条评论

boredream

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<