1. 扩展已有对象的属性和方法
var object = new Object();
object.name = 'zhangsan';
object.age = 20 ;
object.getInfo = function () {
alert( 'Name : ' + this.name + ' Age : ' + this.age );
}
object.getInfo();
2. 工厂方法
function createObject(name, age) {
var object = new Object();
object.name = name ;
object.age = age ;
object.getInfo = function () {
alert("Name : " + this.name + " Age : " + this.age );
}
return object ; // 将创建好的对象返回
}
var obj1 = createObject("Michael Chen",100);
obj1.getInfo();
2.1 改进的工厂方法,同一个方法对象被所有创建出来的对象共享
function createObject(name, age) {
var obj = new Object();
obj.name = name ;
obj.age = age ;
obj.getInfo = get ;
return obj ;
}
function get() {
alert('Name : ' + this.name + 'Age : ' + this.age);
}
var obj1 = createObject('Jackson',30);
obj1.getInfo();
3. 构造函数方式创建对象
function person(name , age) {
// 在执行第一行代码前,js 引擎会为我们生成一个对象
this.name = name;
this.age = age ;
this.getInfo = function () {
alert(" Name : " + this.name + " Age : " + this.age );
}
// 此处有一个隐藏的 return 语句,用于将之前生成的对象返回
}
var person1 = new person("Michael","24");
person1.getInfo();
4. 原型方式( prototype )创建对象
function Person() {
}
Person.prototype.name = "zhangsan";
Person.prototype.age = 13 ;
Person.prototype.scores = new Array();
Person.prototype.getPersonInfo = function () {
alert( "Name : " + this.name + " Age : " + this.age + this.scores[0] + this.scores[1] + this.scores[2] );
}
var person = new Person();
person.scores.push("语文:59");
person.scores.push("数学:100");
person.scores.push("英语:100");
person.getPersonInfo();
使用原型创建对象的缺陷:
- 无法动态为对象赋值,需要在对象被创建以后赋值 ;
- 创建的对象共享属性 ;
4.1 构造方法 + 原型 创建对象
function Person( name , age ){
this.name = name ;
this.age = age ;
}
Person.prototype.getInfo = function(){
alert('Name : ' + this.name + 'Age : ' + this.age );
}
var p1 = new Person('James',34);
p1.getInfo();
5. 动态原型方式创建对象
function Person() {
this.name = "zhangsan";
this.age = 12 ;
if (typeof Person.flag == "undefined") {
Person.prototype.getPersonInfo = function () {
alert("Name : " + this.name + " Age : " + this.age);
}
Person.flag = true ;
}
}
var p1 = new Person();
p1.name = "Jack";
p1.age = 22 ;
p1.getPersonInfo();