Skip to content

Latest commit

 

History

History
46 lines (25 loc) · 1.63 KB

README.md

File metadata and controls

46 lines (25 loc) · 1.63 KB

当我们使用new关键词的时候,浏览器到底做了哪些事情?

new 关键词

谈谈面向对象

面向对象是一种编程思想,是独立于语言而存在的。虽然很多语言在设计上就偏向于让这门语言很方便的用于面向对象的编程,但不得不说面向对象是一种程序设计的思想,与语言无关。

类是一种设计模式。它定义了一套用于解决一类问题的完整方案。和具体的语言无关。

构造函数

在一些基于类而实现的面向对象的语言中,是有很纯粹的构造函数的。意思是什么?就是构造函数只能拿来构造对象。

但是在js中,叫做构造函数并不恰当。为什么?因为构造函数本身和其它的函数并没有不同,只是调用的方式略有不同。任何函数都可以拿来构造对象。所以我更赞同这样的叫法:函数的构造调用。(有心的同学可以去看看函数的四种调用方式,javascript语言精粹修订版27页)

表象

function Person(name,age){
    this.name = name;
    this.age = age;
}

person = new Person('chen',25);

会产生一个对象,包含name和age两个属性。值分别为'chen'和25。

引擎执行过程

1、创建一个全新的空对象。 2、对这个对象执行[[prototype]]链接。 3、把新对象绑定函数的this,并且调用函数。 4、如果函数没有返回其它的对象,那么就会返回当前的this,也就是新对象。

手动模拟new的过程。

var obj = Object.create(null);  //  {}
obj.__proto__ = Person.prototype;
Person.call(obj,'chen',25);