面试中若是问到原型链,应该从以下四个方面进行考虑:
1 创建对象有几种方法
2 原型,构造函数,实例,原型链
3 instanceof的原理
4 new 运算符
A:首先从创建对象有几种方法进行讲解:通常有这四种方法创建对象
(1)字面量直接创建对象(2)new OBject一个对象(3)函数构造new出一个对象(4)通过Object.creat创建一个对象
B:原型,构造函数,实例,原型链 对应的图解如下:
理解概念问题:
构造函数:只要是被new使用了的函数,都被称之为构造函数
实例:new出来的结果,称之为实例
原型对象通过构造器constructor来区分是被哪个构造函数来进行引用
函数在创建的时候,js会默认给函数一个prototype属性
原型链的实现原理: 假如现在有一个函数M,现需要给M增加一个say方法,若是直接在M函数中进行声明this.say = say,则在构造实例的时候,都会进行copy创建一次say,这会增加内存的使用。因此可以考虑在M函数的原型prototype上增加say方法,提供给创建的实例进行使用。在实例进行调用此方法时,会通过原型一层层去进行寻找。
var M=function(name){this.name = name}; var o3 = new M();
通过 M.prototype.say = function(){console.log('hello world')}进行增加say方法,,o3.say()即可进行调用;
注意:只有实例对象有__proto__属性,,(function函数也算是一个对象,所以M.__proto__==Function.prototype,M是Function函数的实例对象)
C:原型链上instanceof的理解:
未完,待续,临时有事,还请谅解。