学习学习javascript面向对象面向对象 掌握创建对象的掌握创建对象的9种方式种方式
主要为大家介绍了创建对象的9种方式,帮助大家更好地学习javascript面向对象,感兴趣的小伙伴们可以参考一
下
本文为大家分享了javascript创建对象的9种方式,供大家参考,具体内容如下
【【1】使用】使用Object构造函数构造函数
[缺点]使用同一个接口创建很多对象,会产生大量重复代码
var person = new Object();
person.name = "Nicholas";
person.age = 29;
person.job = "Software Engineer";
person.sayName = function(){
alert(this.name);
}
【2】使用对象字面量
[缺点]使用同一个接口创建很多对象,会产生大量重复代码
var person = {
name: "Nicholas",
age : 29,
job: "Software Engineer",
sayName: function(){
alert(this.name);
}
};
【3】工厂模式:抽象了创建具体对象的过程,考虑到ECMAScript中无法创建类,开发人员就发明了一种函数,用函数来封装
以特定接口创建对象的细节
[缺点]解决了创建多个相似对象的问题,但没有解决对象识别的问题
function createPerson(name,age,job){
var o = new Object();
o.name = name;
o.age = age;
o.job = job;
o.sayname = function(){
alert(this.name);
}
return o;
}
var person1 = createPerson('Nicholas',29,'software Engineer');
var person2 = createPerson('greg',27,'doctor');
【4】构造函数模式:没有显式地创建对象,直接将属性和方法赋给了this对象,没有return语句
[缺点]每个方法都要在每个实例上重新创建一遍
function Person(name,age,job){
this.name = name;
this.age = age;
this.jog = job;
this.sayName = function(){
alert(this.name);
};
//与声明函数在逻辑上是等价的
//this.sayName = new Function('alert(this.name)');
}
var person1 = new Person("Nicholas",29,"software Engineer");
var person2 = new Person("Greg",27,"doctor");
【4.1】构造函数拓展模式:把函数定义转移到构造函数外部
[缺点1]在全局作用域中定义的函数实际上只能被某个对象调用,这让全局作用域有点名不副实
[缺点2]若对象需要定义很多方法,就要定义很多全局函数,这个自定义引用类型就没有封装性可言
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = sayName;
}
function sayName(){