原型链接点__proto__ 原型属性prototype

  1. prototype: 函数(类)的一个属性: 是一个对象 {}
  2. __proto__: 对象Object的一个属性: 是一个对象 {}.

类与他的实例中的原型关系

  1. 类的prototype.constructor指向类
  2. 类实例的__proto__指向类的prototype等价于 对象的__proto__保存着该对象的构造函数的 prototype
  3. 类实例的constructor指向类
  4. 类实例没有prototype属性。
  5. __proto__类似数据结构中的链表,__proto__本身包含着一个__proto__指针,指向父类的__proto__
  6. 基础类 Object的prototype.__proto__为null。
  7. 类的__proto__指向 Function.prototypeES6的类实际是es5 函数的语法糖,本质还是通过es5的函数实现的
  8. 类实例的constructor是可以直接更改的 !!!
 class Person{
    constructor(name){
      this.name = name;
    };
    age = 31;
 }
 let p = new Person('姓名');
 Person.prototype.sex = '男';
 console.log(p);
 
 console.log(p.constructor === Person); // true  类实例的constructor指向类
 
 console.log(p.__proto__ === Person.prototype); // true
 
 console.log(Object.prototype.__proto__); // null
 
 console.log(Person.prototype.constructor  === Person); // true
 
 console.log(Person.prototype.__proto__ === Object.prototype); // true
 
 console.log(Person.__proto__ === Function.prototype) // true
 
 console.log(Function.__proto__ === Function.prototype) // true 顶层 语言设计
 
 console.log(Obejct.__proto__ === Function.prototype); // true Function构造出了 Object
 
 console.log(Obejct.__proto__ === Function.__proto__); // true
 
 class NewPerson{}
 p.constructor = NewPerson; // 直接更改实例的constructor
 console.log(p.constructor === NewPerson) // true;
 
  p = {
   __proto__: Person.prototype =      {
            __proto__: Object.prototype
        }   
  }

hasOwnProperty是Object.prototype的一个方法,它可是个好东西,他能判断一个对象是否包含自定义属性而不是原型链上的属性.

  p.hasOwnProperty('age') // true;
  p.hasOwnProperty('name') // true;
  p.hasOwnProperty('sex') // false;
  'age' in p // true
  'name' in p // true
  'sex' in p // true
  1. 使用forin 可以获取所有的可枚举属性.
  2. 使用Object.keys返回实例中所有可枚举属性组成的数组, 不包括原型中的!!!

image

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值