1 <script> 2 //定义一个构造函数 3 function Fn() { 4 //内部自动执行一条语句,增加prototype属性并赋值一个空对象 5 //this.prototype = {} 这就是显示原型 6 } 7 console.log(Fn.prototype); //查看显示原型 8 9 //新建一个实例化对象,在新建对象的时候会默认创建隐示原型属性__proto__ 10 //创建语句就是 this.__proto__ = Fn.prototype,就是把prototype属性赋值给__proto__,所以他们俩是相等的 11 var fn = new Fn(); 12 console.log(fn.__proto__); //查看隐示原型 13 14 //显示原型和隐示原型的比较 15 console.log(Fn.prototype === fn.__proto__); //true 16 17 //显示原型一般用于动态的给构造函数增加方法。因为和隐示原型是相等的,所以对象实例也可以查找到增加的方法并直接使用? 18 Fn.prototype.test = function(){ 19 console.log('test()'); 20 } 21 //通过隐示原型调用到显示原型增加的方法? 22 fn.test(); 23 24 </script>
图解: