原型图

对于原型图 我们三句话
- 每一个函数(类)都有一个默认的prototype 属性,指向自己的原型对象
- 每一个实例(对象)都有一个__proto__属性,指向所属类的原型对象
- 每一个默认的原型对象上都有一个constructor属性 指向对应的函数构造本身
普通函数的执行过程
开辟一个作用域---->形参赋值---->变量提升----->代码从上到下执行;
new 函数执行
开辟一个作用域---->形参赋值---->变量提升---->开辟一个堆内存,把this的指向改成堆内存---->然后代码从上到下执行---->默认return为this
私有属性
`in 是用来查看 某个属性 是否属于莫格对象,换句话说 就是 该对象是否可以调到该对象`
in 只能判断出某个属性 是不是属于某个对象;但是不能区别出是否是他的私有属性。
`obj.hasOwnProperty('xxx') 这个属性可以用来查看'xxx' 是否是 obj 的私有属性 `
hasOwnproperty 方法在基类的原型上,所有任何数据类型(除去null、undefined) 都可以调到该方法
//自己封装一个hasPubPropety //用来查看某个属性是否是某个对象的共有属性;
// 用法等于用hasOwnProperty
var obj={};
obj.__proto__.hasPubProperty= function (n){
return (n in this && !this.hasOwnProperty(n) ? true : false)
}
obj.hasPubProperty("aaada")
原型重构 (注意 constructor 的指向)
function Person(name,age) {
this.name = name;
this.age = age;
}
Person.prototype.eat = function(){}
var obj = {
constructor:Person,
eat(){},
play(){}
}
Person.prototype = obj
xxx instanceof xx2 ;查看xxx 到基类的原型链上 是否存在xxx2的身影
var ary = [];
var n = 10;
var m = new Number(10);
console.log(ary instanceof Array) // true
console.log(ary instanceof Object) // true
console.log(ary instanceof Number) // false
console.log(n instanceof Number) // false
console.log(m instanceof Number) // true
存在结果就是true 不存在 结果就是false
值类型的数据 instanceof 谁 都是false`