在js中,通过自定义函数的方式创建对象,其中:函数和构造函数的区别是:构造函数的名字的首字母是大写的。创建对象的主要方式有:工厂模式,构造函数模式,字面量模式等
1、工厂模式
通过示例说明,代码如下:
//工厂设计模式创建对象
function createObject(name,age){
var obj = new Object();//创建对象
//添加属性
obj.name = name;
obj.age = age;
//添加方法
obj.sayHi = function(){
console.log("我叫"+this.name+";年龄"+this.age);
};
return obj;
}
var per1 = createObject("小红",26);
per1.sayHi();
优点:接受参数,可以无数次的调用这个函数,创建Person对象,而每次他都可以返回一个包含三个属性一个方法的对象。
缺点:虽然解决了创建多个相似对象的问题,但是没有解决对象识别的问题(即怎么知道一个对象的类型)。
2、构造函数模式
通过示例说明,代码如下:
<script>
function Person(name,age){ //自定义的人的构造函数
this.name = name; //属性
this.age = age;
this.sayHi=function(){ //匿名方法
console.log("我叫:"+this.name+",年龄"+this.age);
};
}
//自定义构造函数创建对象;先自定义一个构造函数,再创建对象
var obj = new Person("小明",11);//创建对象
console.log(obj.name); //输出到对象属性console
console.log(obj.age);
obj.sayHi(); //调用对象的方法
</script>
Person()中的代码和createObject()的不同之处:
(1)没有显式地创建对象
(2)直接将属性和方法赋给了this对象
(3)没有return语句
♦要创建Person对象的新实例,必须使用new操作符。以这种方式调用构造函数会经历一下四个步骤:
(1)创建一个新对象。
(2)将构造函数的作用域赋给新对象(因此this就指向这个新对象)
(3)执行构造函数中的代码(为这个新对象添加属性)
(4)返回新对象
优点:创建自定义的构造函数意味着将来可以将它的实例标识为一种特定的类型。
缺点:每个方法都要在每个实例上重新创新一遍。person1,person2都有一个名为sayName()的方法,但这两个方法不是同一个Function的实例。因为ECMAScript中的函数是对象,所以每定义一个函数都是实例化了一个对象。
3、字面量模式
通过示例说明,代码如下:
var obj={
name:"小明",
age:20,
sayHi:function(){
console.log("我是"+this.name);
},
eat:function(){
console.log("吃了");
}
};
obj.sayHi;//调用对象中的函数
缺点:一次性的对象,对象的属性值在初始化时固定;
参考:
https://www.cnblogs.com/linququ/p/8733079.html
表示感谢!