原型链
原型也是对象 是通过new Object()构造而出
function Obj(name) {
this.name = name
}
var a = new Obj("小明")
a是由构造函数生成
Obj ---> new 生成a
Obj.prototype 是由 new Object() ----> 生成
a.__proto__ == Obj.prototype
var b = {
name: "小红"
}
相当于
var b = new Object();
b.name = "小红"
由上代码可得知以下关系
Object.prototype.__proto__的结果为null
故
console.log(Obj.prototype.__proto__ === Object.prototype);
console.log(a.__proto__.__proto__ === Object.prototype);
结果都为true
函数原型链
Function 这个函数浏览器自动生成
Funciton 的protptype和__protp__ 都是Function原型
构造函数(上文Obj)与函数Object 都是由new Function()得出,
所以 函数Object的__proto__是Function的原型对象,
因为所有的原型都是对象 所以Function的原型的__proto__为函数Object的prototype
得出
instanceof
判断object的原型链中,是否存在instanceof 后面的原型
function Obj(name) {
this.name = name
}
var a = new Obj("小明")
console.log(a instanceof Obj)
console.log(a instanceof Object)
console.log(a instanceof Function)
打印结果为 true true false
Object.getPrototypeOf(a)
返回对象a的隐式原型
function Obj(name) {
this.name = name
}
var a = new Obj("小明")
console.log(Object.getPrototypeOf(a) === Obj.prototype);
打印结果为 true
创建空原型的对象
Object.create()
返回一个新的对象 隐式类型为括号中的内容
Object.setPrototypeOf(obj,null)
将对象obj的隐式类型设置为null
var obj = {
a: 1,
b: 3
}
Object.setPrototypeOf(obj, null)