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,也就是新对象。
var obj = Object.create(null); // {}
obj.__proto__ = Person.prototype;
Person.call(obj,'chen',25);