JavaScript之面向对象的程序设计1—对象创建方式

1. 工厂模式

function createPerson(name, age) {
	var obj = new Object();
	obj.name = name;
	obj.age = age;
	obj.say = function() {
		alert(this.name);
	};
	return obj;
}
	var p1 = createPerson('shadow', 23);
	p1.say();

2. 构造函数模式

    2.1 使用new调用

function Person(name, age) {
	this.name = name;
	this.age = age;
	this.say = function() {
		alert(this.name);
	};
}
var p1 = new Person('shaow', 23);
    p1.say();

 

    2.2 不使用new调用

Person('shadow', 21);
window.say();

 

    2.3 在另一对象的作用域中调用

var o = new Object();
Person.call(o, 'shadow', 24);
o.say();

 

3.原型模式
    3.1 可以通过对象实例保存原型中的值,但不能通过对象实例重写原型中的值

function Person() {
				
}
Person.prototype.name = "prototype val";
var p1 = new Person();
var p2 = new Person();
p1.name = "object val";
alert(p1.name);//prototype val
alert(p2.name);//object val
 

     当为对象添加属性时,只会屏蔽调原型对象中的相同属性,不会修改原型对象中的属性

    3.2 可以使用delete删除实例属性

function Person() {
				
}
Person.prototype.name = "prototype val";
var p1 = new Person();
var p2 = new Person();
p1.name = "object val";
delete p1.name;
alert(p1.name);//prototype val
alert(p2.name);//prototype val

 

    3.3 使用hasOwnProperty方法可以检测一个属性是存在于实例中还是原型中

function Person() {
				
}
Person.prototype.name = "prototype val";
var p1 = new Person();
var p2 = new Person();
p1.name = "object val";
alert(p1.hasOwnProperty("name"));//true
delete p1.name;
alert(p1.hasOwnProperty("name"));//false

 

4.组合使用构造模式和原型模式(默认定义引用类型的模式)

function Person(name){
    this.name = name;
    this.friends = ["shadow", "parsons"];
}
Person.prototype = {
    constructor: Person,
    say: function(){
         alert(this.name);
    }
};
var person1 = new Person();//此时Person
var person2 = new Person();
person1.friends.push("james");
alert(person1.friends);//[shadow, parsons, james]
alert(person2.friends);//[shadow, parsons]
alert(person1.friends == person2.friends);//false
alert(person1.say == person2.say);//true

构造函数用于构造实例属性,原型模式用于构造方法和共享属性

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值