对象,一种数据类型。对象是属性(变量)和方法(函数)结合在一块儿的数据实体函数
对象的出现,就是为了解决封装的问题。能够将许多属性与方法封装在一个对象里,方便调用,也符合人的思考方式。this
var person = new Object(); person.name = "Jonathan"; person.age = 23; person.job = "Developer"; person.sayName = function () { console.log(this.name); };
var person = { name: "Jonathan", age: 23, job: "Developer", sayName: function () { console.log(this.name); } }; console.log(person.name); //Jonathan person.sayName(); //Jonathan
这样一来,就把属性和方法封装进了一个对象中,方便调用。code
若是要建立许多对象,传统方法存在如下问题对象
因为JavaScript自己没有类的概念,所以诞生了构造函数模式来建立对象,该方法利用函数建立对象。因为函数自己也是对象,所以能够这么操做。
构造函数建立对象的方法是:继承
function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.sayName = function(){ console.log(this.name); }; } var person1 = new Person("Nicholas", 29, "Software Engineer"); var person2 = new Person("Greg", 27, "Doctor");
要点:ip
至此,一个Person对象的建立就完成了,它有如下优势:原型
但用构造函数模式的方法建立对象并非完美的,它存在如下问题,即:
每一个方法(对象内置函数)都要在实例上从新建立一遍
构造函数也能够用如下方法定义,方便咱们发现问题io
function Person(name, age, job){ this.name = name; this.age = age; this.job = job; this.sayName = new Function(console.log(this.name)); }; } var person1 = new Person("Nicholas", 29, "Software Engineer"); var person2 = new Person("Greg", 27, "Doctor"); console.log(person1.sayName == person2sayName); //false
在新建对象person1和person2时,分别新建了两个不一样的方法person1.sayName()和person2.sayName()。
但这很没有必要,只须要公用一个sayName()方法就行了。为了解决上述问题,诞生了原型模式console