JavaScript设计模式

1、工厂模式
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("采菊东离下",55,"悠然见南山");
var person2 = createPerson("君不见黄河之水天上来", 1000, "奔流到海不复回");




2、构造函数模式
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.sayName = function (){
alert(this.name);
};
}  
var p1 = new Person("采菊东离下",55,"悠然见南山");
var p2 = new Person("君不见黄河之水天上来", 1000, "奔流到海不复回");




3、原型模式(主要用到属性prototype)
function Person(){
Person.prototype.name = "天生我才必有用";
Person.prototype.age = 23;
Person.prototype.job = "千金散尽还复来";
Person.prototype.sayName = function(){
alert(this.name);
};
}
var person1 = new Person();
var person2 = new Person();
alert(person1.sayName == person2.sayName);//true




function Person(){};
Person.prototype.name = "Nicholas";//原型属性
Person.prototype.age = 33;
Person.prototype.job = "Software Engineer";
Person.prototype.sayName = function(){
alert(this.name);
};
var person1 = new Person();
var person2 = new Person();
person1.name = "grent";//实例属性
console.log(person1.name);//grent
console.log(person2.name);//Nicholas


delete person1.name;//true   删除的是实例属性,原型模式数据删除不了
console.log(person1.name);//Nicholas




//hasOwnProperty()方法可以检测一个属性是存在于实例中,还是存在于原型中。这个方法只在给定属性存在于对象实例中时,才会返回 true。
person1.name="greate";
console.log(person1.hasOwnProperty("name"));//true
delete person1.name;
console.log(person1.hasOwnProperty("name"));//false


//Object.keys()方法。这个方法接收一个对象作为参数,返回一个包含所有可枚举属性的字符串数组
var keys = Object.keys(Person.prototype);//获取键值信息
console.log(keys);// ["name", "age", "job", "sayName"]


var p1 = new Person();
p1.name  = "Rob";
p1.age = 44;
var keys1 = Object.keys(p1);
console.log(keys1);// ["name", "age"] 获取的是实例属性




//简单的原型语法


function Person(){};
Person.prototype = {
constructor : Person,//增加构造函数
name :"欲穷千里目",
age : 33,
job : "更上一层楼",
sayName : function (){
console.log(this.name);
}
}
//以上代码特意包含了一个 constructor 属性,并将它的值设置为 Person,从而确保了通过该属性能够访问到适当的值。


4、组合使用构造函数模式和原型模式
//构造函数
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.friends = ["万年唯好静","万事不关心"];
};
//原型模式
Person.prototype  = { 
constructor : Person,
sayName : function(){
console.log(this.name);
}
}
var person1 = new Person("Nicholas", 29, "Software Engineer");
var person2 = new Person("Greg", 27, "Doctor"); 


person1.friends.push("Van");
person1.friends;// ["万年唯好静", "万事不关心", "Van"]
person2.friends;// ["万年唯好静", "万事不关心"]
person1.friends === person2.friends;//false
person1.sayName === person2.sayName;//true




5、动态原型模式
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
//判断条件,此段代码只会执行一次,判断sayName是否已经是函数,如果是就不要再创建了
if(typeof this.sayName != "function"){
Person.prototype.sayName = function(){
console.log(this.name);
};
}
};


var friend = new Person("Nicholas", 29, "Software Engineer");
friend.sayName();//Nicholas

6、寄生构造函数模式
function Person(name,age,job){
var o = new Object();
o.name = name;
o.age  = age;
o.job = job;
o.sayName = function(){
console.log(this.name);

return o;
}
var friend = new Person("Nicholas", 29, "Software Engineer");
friend.sayName(); //"Nicholas
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值