`
ipjmc
  • 浏览: 702634 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JavaScript定义对象

阅读更多
javascript定义对象的几种简单方法
1.构造函数方式,全部属性及对象的方法都放在构造方法里面定义
优点:动态的传递参数
缺点:每创建一个对象就会创建相同的方法函数对象,占用大量内存


function User1(name, password) {
	this.name = name;
	this.password = password;
	this.login = function(name,password){
		if(this.name == name && this.password == password) {
			return true;
		}else {
			return false;
		}
	};
}


2.原型方式,将对象属性及方法定义都写在对象的prototype里面
优点:每次创建对象时都是使用相同prototype中的方法,不会占用重复的内存
缺点:无法动态传递构造参数

function User2() {
}

User2.prototype.name = "prototype name";
User2.prototype.password = "prototype password";
User2.prototype.login = function(name,password){
	if(this.name == name && this.password == password) {
		return true;
	} else {
		return false;
	}
};


3.构造及原型混合方式,将属性定义写在构造方式里面,方法写在prototype里面
优点:综合了construct及prototype方式的优点,可以动态传递构造参数,并且方法函数对象也只创建一个
缺点:函数写在对象外面,不太符合面向对象的思想

function User3(name,password) {
	this.name = name;
	this.password = password;
}

User3.prototype.login = function(name,password) {
	if(this.name == name && this.password == password) {
		return true;
	} else {
		return false;
	}
};


4.动态原型方式:加一个判断属性,来判断该对象是否已经被创建过,如果被创建过,则方法就不在构建
优点:将原型函数写在对象定义里面
缺点:不支持继承

function User4(name,password) {
	this.name = name;
	this.password = password;
	if(typeof User4.__initialized == "undefined") {
		User4.prototype.login = function(name,password){
			if(this.name == name && this.password == password) {
				return true;
			} else {
				return false;
			}
		};
		User4.__initialized = true;
	}
}


大底javascript定义对象的方式主要是上述的四种,能满足绝大部分的需求。希望对javascript初学都来说有一定的帮助。同时附件里包含简单的示例,供初学都直接运行。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics