js原型是一个非常抽象的概念,但是在实际应用中非常的广泛,同时也是面试过程中非常容易碰到的问题,作者在这里通过自己对js原型的理解来理一理js原型链的相关概念。
在JavaScript中除了null对象以外,所有的对象都与另外一个对象相关联,而所谓的另一个对象就是这个对象的原型,而对象又从原型继承属性或方法。
例如函数在创建的时候就包含一个prototype属性,该属性返回一个函数对象,包含函数的相关属性,这个对象就是该函数的原型对象,可以通过function.prototype来获得原型对象的引用:
var test=function(){};//声明一个函数
console.log(test.prototype)//返回一个函数对象,该对象就是函数的原型对象
函数的原型包含了函数的相关属性,可以对其中的属性进行增删改查
test.prototype.content="1234";//新增函数属性
console.log(test.content)//输出1234
原型存在的意义就是其中包含的该函数的属性可以被该函数实例化后的子对象继承
var test_1=new test();//实例化一个test
console.log(test_1.content);//返回1234
同时js还内置了一个方法hasOwnProperty用来判断某一属性是否是该函数对象的自有属性
console.log(test_1.hasOwnProperty("content"))//返回false
那么理解了js原型的概念,在来看看什么是原型链
每一个原型对象中都包含一个构造函数constructor和一个__proto__,该构造函数用来引用该原型指向的的函数对象本身,该__proto__指向一个原型对象
console.log(test.prototype.constructor==test)//返回true
console.log(test.prototype.__proto__==Object.prototype)//返回true
这是一种循环引用,直到__proto__的值返回null,所有这一系列链接的原型对象就是所谓的原型链
以上就是作者对于原型链一点浅显的理解
网友评论