//只有对象可以无限加层 其他的数组,函数等等都不能 数组只有固定的三层 函数
function add(){
}
//var arr=[];
//var a={} //新var的对象 只有两层 上层Object 底层Object
console.log("------------------")
//console.log(arr) //数组只有三层 顶层Array 底层Array 底层Object
//函数有四层 顶层Function 底层Function 上层Object 底层Object
console.log(add.prototype) //直接跳上层Object 只有函数有prototype
console.log(add.__proto__) //function(){}空函数
//在写代码时 写Function首先得到的是上层Function 如果你希望得到底层Function 就要Function.prototype
console.log(Function.prototype) //call方法就是封在这层 底层Function 所有的函数都有call方法
//可以封一个类似call的函数 Function.prototype.callPro=function(){} 这样所有的函数都有callPro方法了
console.log("--------------")
function Student(){
this.type="a Student"
}
function HxsdStudent(){
this.type="a HxsdStudent"
}
//这样 如果通过HxsdStudent创造出来的实例就有 底层HxsdStudent 底层Student 一个上层Object 一个底层Object
//但是没有上层Student 上层Student是Object.create()实现的
HxsdStudent.prototype=new Student()
var a=new HxsdStudent()
//construtor是写在上层Object上的
console.log(a)
console.log(a.__proto__)//Student层 //a处于底层HxsdStudent 它的下一层是底层Student
console.log(a.__proto__.__proto__) //Student层下一层就是上层Object层了 这层有construtor
console.log(a.__proto__.__proto__.__proto__) //底层Object
var b=Object.create(a) //这句话对a是有影响的 在浏览器中a的最顶层会被改名成次顶层
alert(a instanceof HxsdStudent) //true 还是true但是在浏览器中已经看不到HxsdStudent层了 被改名为Student
console.log(b) //有顶层HxsdStudent(被改名为Student) 底层HxsdStudent(被改名为Student) 底层Student 上层Object 底层Object
Student.prototype.speak1=function(){ //再次说明HxsdStudent只是被改名了而已
alert("我在Object层")
}
//这个HxsdStudent指的是构造器 不是Object.create创造出来的HxsdStudent层
HxsdStudent.prototype.speak2=function(){ //Object.create创造出来的层不是构造器,所以不能被检索
alert("我在Student层")
}
console.log(b)
//总结函数用prototype 对象用__proto__
Javascript构造函数和Object.create创造的"层"
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...