在面向对象前篇中提到过原型的概念,说到原型,便又延伸出了关于原型的一个知识点——原型链。也许作为一名专业的前端开发人员来说,明白原型链的含义以及用法,但对于前端的爱好者和在校大学生而言,对于原型链的概念可能是第一次听说,所以,今天就和大家学习一下原型链。
一、含义
实例对象和原型对象组成的一条链式结构,链式结构之间通过proto链接起来,这条链就成为原型链。
例:
function Person(name){
this.name=name;
}
Person.prototype.showName=function(){
console.log(this.name);
}
var p=new Person("Sue");
//以上函数的原型链
p-->Person.prototype-->Object.prototype-->null
//其中,-->表示__proto__,该原型链的含义为:p.__proto__指向其构造函数的原型Person.prototype,而构造函数的原型默认是Object的实例,因而指向Object.prototype,之后便结束为空,至于原理,请参照上篇web前端开发中关于面向对象(二)进行理解。
通过几次的实验和验证可以发现,原型链的末端都是Object.prototype,所有的对象都直接或间接的继承Object。
二、精确判断数据类型的方法
判断数据类型不仅仅有typeof一种方式,且typeof方法只能判断一般的数据类型,得到的结果较为模糊,不够精准。若想要精确的判断数据类型,需用到Object.prototype上的toString方法。使用Object.prototype.toString方法判断数据类型需要改变this的指向,因而需要配合call一起使用。typeof与Object.prototype.toString的区别:
var arr= [];
var fn = function(){};
var str = "str";
var obj = {};
var date = new Date();
var regExp = new RegExp();
console.log("toString判断结果:"+Object.prototype.toString.call(arr));
console.log("typeof判断结果:"+typeof arr);
console.log('------------------')
console.log("toString判断结果:"+Object.prototype.toString.call(fn));
console.log("typeof判断结果:"+typeof fn);
console.log('------------------')
console.log("toString判断结果:"+Object.prototype.toString.call