JS原型与原型链的深入理解
要了解原型和原型链,要理解普通对象和函数对象。
一、普通对象和函数对象的区别
在Javascript的世界里,全都是对象,而对象之间也是存在区别,我们区分一下普通对象和函数对象,如下代码
function f1(){}; var f2 = function(){}; var f3 = new function(){}; var o1 = {}; var o2 = new Object(); var o3 = new f1(); console.log(typeof Object); //function console.log(typeof Function);//function console.log(typeof f1) //function console.log(typeof f2) // function console.log(typeof f3) //function console.log(typeof o1) //object console.log(typeof o2) //object console.log(typeof o3)// object
在上面的代码中可以看出,f1、f2和f3都是函数对象,而o1,o2和o3都是object对象,也就是普通对象,函数对象本质就是由new function()构造而来,其他的都是普通对象;函数对象和普通对象理解之后,后文会说明两者的区别。
二、原型
在JavaScript中,原型也是一个对象,原型的作用,则是实现对象的继承。
在js的所有函数对象中,都存在一个属性prototype,该属性对应当前对象的原型。
而所有的JavaScript对象,都存在一个_proto_属性(由于_proto_是个非标准属性,只有ff和chrome两个浏览器支持,标准方法是Object.getPrototypeOf()),_proto_属性指向实例对象的构造函数的原型,理解起来就如下
var p = new Person(); console.log(p._proto === Person.prototype)//true
从上面代码可以看出,p是实例对象,Person是p的构造函数,可以看出来p的_proto_属性指向构造函数Person的原型。
狼蚁网站SEO优化用代码来解释一下js是如何通过原型进行继承的
var parent = function(name){ this.name = name; } parent.prototype.getName = function(){ return this.name; } var son = new parent("huahua"); console.log(son.getName());//'huahua'
显然,son继承了parent的原型中的函数属性getName。
三、原型链
除开Object的prototype的原型是null以外,所有的对象和原型都有自己的原型,对象的原型指向原型对象。
在层级多的关系中,多个原型层层相连则构成了原型链。
在查找一个对象的属性时,倘若在当前对象找不到该属性,则会沿着原型链一直往上查找,知道找到为止,如果到了原型链顶端,还没找到,则返回undefined。
四、constructor
constructor是构造函数创建的实例的属性,该属性的作用是指向创建当前对象的构造函数。
例如,son.constructor == parent;//true
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持狼蚁SEO。
编程语言
- 如何快速学会编程 如何快速学会ug编程
- 免费学编程的app 推荐12个免费学编程的好网站
- 电脑怎么编程:电脑怎么编程网咯游戏菜单图标
- 如何写代码新手教学 如何写代码新手教学手机
- 基础编程入门教程视频 基础编程入门教程视频华
- 编程演示:编程演示浦丰投针过程
- 乐高编程加盟 乐高积木编程加盟
- 跟我学plc编程 plc编程自学入门视频教程
- ug编程成航林总 ug编程实战视频
- 孩子学编程的好处和坏处
- 初学者学编程该从哪里开始 新手学编程从哪里入
- 慢走丝编程 慢走丝编程难学吗
- 国内十强少儿编程机构 中国少儿编程机构十强有
- 成人计算机速成培训班 成人计算机速成培训班办
- 孩子学编程网上课程哪家好 儿童学编程比较好的
- 代码编程教学入门软件 代码编程教程