工厂模式
最终返回一个对象
function work(name, sex) {
//函数里面封装对象 返回对象
var obj = new Object();
//设置相关属性
obj.name = name;
obj.sex = sex;
obj.sleep = function () {
return "正在睡觉!";
}
return obj;
}
var object = work("毛豆", "男");
console.log(typeof object);
注释:解决了创建多个对象的问题,但是没有结解决对象识别的问题(怎样知道一个对象的类型)
构造函数模式
function bullet() {
this.width = 20;
this.height = 15;
this.speed = 10;
this.g = 9.8;
this.flymove = function () {
}
}
var b = new bullet();
console.log(b);
注释:没有显示的创建对象,没有返回语句,直接将属性赋给this对象,将Person的实例对象标识为一种特定的类型
缺点:每个方法在每个实例上面都需要重新定义一遍,
原型模式
以原型模式开发,原型链模式开发会导致不同的对象之间数据共享
function person() {
}
person.prototype.sleep = function () {
return "睡觉";
}
person.prototype.name = "张三";
var p = new person();
console.log(p);
var p1 = new person();
console.log(p1);
注意:省略了为构造函数传递初始化参数,结果所有实例享有相同的属性(对于函数实用,但是对于那些基本属性也说的过去,但是对于引用类型的数据就麻烦了)
基本属性我们可以在实例当中添加一个同名属性,这样可以隐藏原型当中的对应的属性,但是引用类型的属性却会导致所有实例共享
构造模式+原型链模式
构造函数用于定义实例属性,原型上面定义共享的属性和方法
function f1() {
this.name = "毛豆"
}
f1.prototype.sleep = function () {
return "睡觉"
}
var f = new f1();
console.log(f);
单例模式
返回一个对象
var obj = (function () {
var newobj;
function getobj() {
//实例化对象 返回对象
if (newobj == undefined) {
newobj = new factory();
}
return newobj;
}
//创建对象的实例
function factory() {
//对象的封装
this.name = "";
this.sex = "";
this.sleep = function () {
}
}
return {
getObj: getobj
}
})();
console.log(obj.getObj());
单例模式也称作为单子模式,单体模式。单例模式的定义是产生一个类的唯一实例,是软件设计中较为简单但是很常用的一种设计模式。
单例模式的核心是确保只有一个实例,并提供全局访问
动态原型模式
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
if(typeof this.speak != "function"){
Person.speak = function(){
console.log(this.name);
};
}
}