原型链、私有属性

297 阅读1分钟

原型链 ---> 原型图

对于原型图,有三句话

  • 每一个函数(类)都有一个默认的prototype属性,指向自己的原型对象
  • 每一个实例(对象)都有一个__proto__的属性,指向所有属类的原型对象
  • 每一个默认的原型对象上都有一个constructor属性,指向对应构造函数本身

普通函数执行过程:开辟一个作用域,形参赋值,变量提升,代码自上而下执行 new执行时,开辟一个作用域,形参赋值,变量提升,开辟一个堆内存,把this的指向改成这个堆内存,然后代码从上到下执行

私有属性

  • in是用来查看某个属性是否属于某个对象;换句话说,就是该对象能否调用到该属性
  • in只能判断出某个属性是不是属于某个对象,但是不能区别出是否是它的私有属性
  • obj.hasOwnPropert('xxx') 这个属性可以用来查看xxx是否是obj的私有属性
  • hasOwnPropert 方法在基类的原型上,所以任何数据类型(除去 null undefined)都能调用到该方法

原型重构

原型重构 注意 constructor 的指向

function Peron(name,age){
    this.name = name;
    this.age = age;
}
Person.prototype.eat() = function(){}
var obj = {
    constructor:Person,
    eat(){},
    paly(){}
}
Person.prototype = obj;

instanceof

var ary = [];
var n = 10;
var m = new Number(10);
console.log(ary instanceof Array);
console.log(ary instanceof Object);
console.log(ary instanceof Number);
console.log(n instanceof Number);
console.log(m instanceof Number);
  • xxx instanceof xxx2 ; 查看xxx到基类的原型链上,是否存在xxx2的身影
  • 存在就是true 不存在就是false
  • 值类型的数据,instanceof 谁都是false