什么是构造函数?
用new关键字来调用的函数被称为构造函数
var arry = new Array();
创建对象的方式:
new Object(){}
工厂函数:
- 加工原料 ,形参
- 进行原料加工 创建对象,并将传进来的参数赋值给对象
- 将产品运出 ,return 将创建好的对象返回
// 工厂函数(普通函数) function createPeople(neme,age){ var peopele = new Object(); peopele.name = name; peopele.age = age; return peopele; } var peopele1 = createPeople("小明",12); console.log(peopele1);
控制台打印结果
构造函数:
- 构造函数的命名规范:首字母大写。不要使用create之类的字。
- 通过this来给对象添加属性和方法。
// 构造函数 function Peopele(name,age){ this.name = name; this.age = age; } var p1= new Peopele("小红",13); console.log(p1);
控制台结果
执行过程:
- 当以new 关键字调用该函数时,会创建一个新的内存空间(可以理解为一个空对象{})
- 函数内部this指向该内存空间 (即this={})
- 执行函数的代码 (通过this为对象添加新成员)
- 默认返回内存空间的地址
如果后面自己写了return语句,return是空值或者是基本类型都是默认返回新创建出来的对象,如果return写的是object 类型的值,将不会返回新创建的对象,而是返回object类型值(null值除外),此时创建出来的对象和构造函数原型无任何关系。
原型对象
构造函数的问题:
构造函数中的方法会造成资源浪费
如果构造函数中函数,创建出来的对象,虽然他们的和函数内容时相同的,但是函数时多次创建出来的,不相等
每个函数中都有一个prototype属性,这个属性是一个对象。这个对象的所有属性和方法,都会被这个函数所拥有。
类:某一类事物的统称
对象:具体的实例
封装:将一类事物的共同点抽离出来,集成为一个构造函数。
继承:
多态:
原型链
当访问一个对象的属性和方法时,会在对象本身上查找这个属性和方法,如果找不到,则通过__proto__到原型对象上查找,如果找到则直接使用,如果找不到再通过__proto__到上层原型对象,直到object顶层原型对象,找不到则报错。