你的位置:首页 > Java教程

[Java教程]prototype/constructor/__proto__之prototype


1任何对象都有__proto__属性 属性值Object
2并不是所有对象都有prototype属性。只有方法对象(构造函数)以及基本数据类型还有Array,有prototype属性;并且所有方法(对象)的prototype属性都是object

在网上有很多关于原型的讲解。在这里我用console.log()的方式给大家呈现。

 1 //一、基本数据类型的原型 2   //console.log(String) String() 这时我们可以把它理解为构造函数 3    4   //console.log(typeof String) function 5    6    7   //console.log(String.prototype) String {} 8   9  //console.log(typeof String.prototype) object 说明String的prototype属性是一个object对象,既然是对象我们就可以给他添加属性或者方法。10  11  String.prototype.cf=function(n){  //给String.prototype这个obj添加方法cf,字符串乘法12      return  new Array(n+1).join(this)13   }14   var str="cmf"15   //console.log(str.cf(10)) cmfcmfcmfcmfcmfcmfcmfcmfcmfcmf16   17   //console.log(String.prototype)  String { cf=function()} String的原型是一个对象(obj)它有cf属性,这个属性对应着一个方法。18 19 //二、构造函数的原型20 function Info(m,n){ //构造函数21   this.m=m22   this.n=n23   this.mn=m+"|"+n24 }25 //var 什么东西前面可以加var 基本数据类型(String Number true underfind) 或者 obj(null function Array)26 27 //var info=new Info('cmf','man')28 //console.log(typeof info)   object 通过构造函数实例化出来的都是obj29 //console.log(info) // info { m="cmf", n="man", mn="cmf|man"}30 31 //console.log(typeof Info) //function 前面说过方法对象(构造函数)有prototype属性32 33 //console.log(Info.prototype) // Info {}34 //console.log(typeof Info.prototype) //object Info.prototype属性是一个对象,是对象我们就给可以给他定义方法或者属性。35 36 //给构造函数原型(obj)定义方法(属性)37 Info.prototype.name=function(){38   return this.m+'name'39 }40 Info.prototype.age='18'41 42 var info2=new Info('cmf','man') //实例化43 44 45            /*  46                   age:"18"在原型上47                   m:"cmf"48 console.log(info2)          mn:"cmf|man"49                   n:"man"50                   name:function()在原型上51             */      52 //console.log(info.name())        53 //三 为什么只有  方法对象以及基本数据类型有prototype属性,它们两有什么相似的地方54 //第一个问题我不知道55 //第二个问题56 var str1=new String('adq')57 var str2='xhb'58 var str3='adq'59 var arry=new Array(1)60 var arry2=new Array(2)61 /*62 console.log(typeof str1) //object63 console.log(typeof str2) //string64 console.log(str1.cf(8)) //adqadqadqadqadqadqadqadq65 console.log(str2.cf(8)) //xhbxhbxhbxhbxhbxhbxhbxhb66 67 console.log(str1==str3) //true68 console.log(str1===str3) //false69 70 怎么理解呢 我们把所有的东西都理解为obj。基本数据类型理解为一个特殊的obj。

把上面的代码自己console.log一遍应该有体会了。