javascript中,一切都是对象, 函数也是对象,也有自己的属性和方法,prototype就是每个函数都有的一个属性,这个属性就是一个对象(对象是属性的集合),默认只有一个constructor属性,指向函数本身。例如SuperType函数:(右侧是该函数的原型)和Object函数(原型可以自定义自己的属性)
接下来看代码:
function Example() { Example.prototype.name = 'maomao'; Example.prototype.getAge = function() { return 18; } } var ex = new Example(); console.log(ex.name); console.log(ex.getAge());
可以看出来,Example是一个函数,ex对象是从这个函数中new出来的,这样ex对象就可以调用Example.prototype中的属性
ex.__proto__ === Example.prototype (每个对象都有一个隐藏属性__proto__,指向创建这个对象的函数的prototype,称隐式原型)
instanceof表示的就是一种继承关系,或者原型链的结构
function Foo() {} var f1 = new Foo(); f1.a = 10; Foo.prototype.a = 100; Foo.prototype.b = 200; console.log(f1.a) //10 console.log(f1.b) //200
访问一个对象的属性时,先在基本属性中查找,如果没有,再沿着__proto__这条链向上找,这就是原型链。
hasOwnProperty区分一个属性到底是基本的还是从原型中找到的,从Object.prototype中来
参考:https://www.cnblogs.com/wangfupeng1988/p/4001284.html
个人认为这篇文章写的非常清晰,基本js的基础知识非常透彻的讲解的很清楚,文章对参考文章做了一个总结作为日常积累,很多内容引用了原文