ES6
全称ECMAScript 6.0,2015年6月发版,目前的浏览器中JavaScript都是ES5版本的。
创建对象的三种方法
// 1、对象字面量
var obj1 = {};
// 2、new Object
var obj2 = new Object();
// 3、构造函数
function Star(uname,age){
this.uname = uname;
this.age = age;
this.sing = function(){
console.log(this.uname+"唱歌了");
}
}
构造函数
构造函数是一种特殊的函数,主要用来初始化对象,即为对象成员变量赋初值,总与new一起用。
注意
- 构造函数用于创建某一类对象,首字母要大写;
- 构造函数要和new一起使用才有意义。
new在执行时会干的四件事
- 在内存中创建一个新的空对象;
- 让this指向这个对象;
- 执行构造函数里面的代码,给这个新对象添加属性和方法;
- 返回这个新对象(不需要return);
构造函数成员
- 实例成员是构造函数内部通过this添加的成员,只能通过实例化的对象来访问;
- 静态成员是在构造函数本身上添加成员,只能通过构造函数访问;
- 构造函数通过原型分配的函数是所有对象所共享的。
JavaScript规定,每一个构造函数都有一个prototype属性,指向另一个对象。prototype是一个对象,这个对象的属性和方法都会被构造函数所拥有。
原型链的作用:共享方法。
对象都会有一个属性__proto__,指向构造函数的prototype原型对象。
对象原型和构造函数(prototype)原型内都有一个属性constructor,我们称之为构造函数,指回构造函数本身。
原型对象内的__proto__是object.prototype;
object.prototype.__proto__是null;
JS成员查找机制
- 当访问一个对象属性(或方法),首先是查找对象自身;
- 如果对象自身不存在,就找它的原型(也就是__proto__ 指向的prototype对象);
- 如果还没有,就找原型对象的原型–Object原型对象;
- 依此类推,一直找到object(null)为止。
this指向问题
在原型对象中,构造函数内的this指向和原型对象中的this指向都是实例对象。