var arr = new Array(12,13,14,15,16,17,18); var arr2 = new Array(12,13); arr.sun=function(){ //用原型加Array.prototype.sun=function() 下面的alert(arr2.sun())生效,就不会出现说arr2没有sun方法,这就好像css里面的class给一组元素加样式 //如果只是arr.sun,就好像是行间样式alert(arr2.sun())不会生效,因为他没有想arr那样加sun方法 var reun = null; for(var i=0;i
// prototype函数才有的属性(prototype为函数增加方法(共用)) __proto__对象才有的属性(所以函数也有这个__proto__只不过为隐形的)// 最终他们是相等的 → console.log(__proto__===constructor.prototype) //ture var a = {} console.log(typeof a.prototype)//undefined console.log(a.__proto__)//对象集合 console.log(typeof a.__proto__) //object var b = function(){} console.log(typeof b.prototype)//object console.log(b.prototype)//b{} console.log(typeof b.__proto__)//function console.log(b.__proto__)//function(){}// 原型链// 因为__proto__是任何对象都有的属性 在js中万物皆对象 所以会形成一个__proto__连起来的链条 递归访问到最后 值为空 var c = function(){} var d = new c() console.log(typeof d.__proto__) //object console.log(d.__proto__)//c() 构造器fucntion c的原型对象 console.log(typeof d.__proto__.__proto__)//object console.log(d.__proto__.__proto__)//object() 构造器fucntion object的原型对象 console.log(typeof d.__proto__.__proto__)//object console.log(d.__proto__.__proto__.__proto__)//null
所有对象都有隐形原型(__proto__) let a = 123 console.log(a.__proto__) console.log(''.__proto__) 以上都会打印出 该对象所拥有的方法