深入JavaScript

深入JavaScript Day09 - 隐式原型、显示原型、n

2022-01-15  本文已影响0人  望穿秋水小作坊

一、理解原型、原型链的一些要点【最重要的概念梳理,一定要理解】

1、对函数 function Foo(){} 调用new会发生以下五件事

①创建一个新的空对象
②将新对象的proto属性指向函数的Prototype对象
③将this指针指向新的对象(new 绑定)
④指向函数体代码
⑤如果函数没有明确返回值,则返回新对象

2、关于Object的内容

①Object.prototype.proto === null
②let o = {a:10};是一种语法糖,完整代码是: let o = new Object({a:10});
③因此:o.proto === Object.prototype; o.proto.proto === Object.prototype.proto === null;

3、关于 proto、prototype、constructor 之间关系理解

proto 凡是对象都有的属性,基本上JavaScript中所有的对象最终都指向 Object.prototype;
② prototype 是函数才拥有的属性,执行代码 let o = new Foo(),会将o.proto指向Foo.prototype;
③ 所有的 prototype 都有一个constructor属性,constructor指向函数对象本身,Foo === o.proto.constructor === o.constructor === Foo.prototype.constructor

4、关于Foo和Function之间的关系的理解

function Foo() {} 是语法糖 const Foo = new Funciton("xxx");因此 Foo.proto === Function.prototype

二、JavaScript创建对象的方式

1、如下创建对象的方式,如果创建100个对象,有什么问题吗?

var p1 = {
  name: "张三",
  age: 18,
  height: 1.88,
  eat: function () {
    console.log(this.name + "在吃饭~");
  },
};

var p2 = {
  name: "张三",
  age: 17,
  height: 1.77,
  eat: function () {
    console.log(this.name + "在吃饭~");
  },
};

console.log(p1);
console.log(p2);

console.log(p1.eat === p2.eat);

2、通过工厂模式创建对象

function eat() {
  console.log(this.name + "在吃饭~");
}

function createPersonFoactory(name, age, height) {
  return {
    name,
    age,
    height,
    eat,
  };
}

var p1 = createPersonFoactory("张三", 18, 1.88);
var p2 = createPersonFoactory("李四", 17, 1.77);

console.log(p1);
console.log(p2);

console.log(p1.eat === p2.eat);

p1.eat();
p2.eat();

3、借助构造函数创建对象的方案

image.png

三、构造函数、new、对象的原型

1、构造函数在什么时候自动调用?JavaScript中的构造函数和其他语言有什么不同?

image.png

2、如果一个函数被使用new操作符调用了,那么它会执行如下操作?

image.png

3、认识对象的原型。是所有对象都有原型吗?怎么获取?隐式原型

image.png

4、认识函数的原型 prototype。所有函数都有都有prototype吗?显示原型

image.png

5、理解new操作时,对象的隐式原型指向显示原型的过程?

image.png image.png image.png

5、理解constructor属性,这个属性存在于哪里,指向谁?

image.png

6、重写显示原型的方式?

image.png image.png

7、如何查看一个属性的属性描述符?

function Person(name) {
  this.name = name;
}
var p1 = new Person("zhansan");
var p2 = new Person("lisi");

console.log(p1.__proto__);
console.log(Object.getOwnPropertyDescriptors(p1));
console.log(Object.getOwnPropertyDescriptors(p1.__proto__));
image.png
上一篇 下一篇

猜你喜欢

热点阅读