标签:
构造函数方式定义类型
function User(userName, userRole) {
this.userName = userName;
this.userId = getGuid();
this.getUserByid = function(userId) {
var result = new User(userId);
return result;
};
}
//生成实例对象。
var user1 = new User("root", "administrator");
var user2 = new User("admin", "administrator");
//这时user1和user2会自动含有一个constructor属性,指向它们的构造函数。
alert(user1.constructor === User); //true
alert(user2.constructor === User); //true
//instanceof运算符,验证原型对象与实例对象之间的关系。
alert(user1 instanceof User); //true
alert(user2 instanceof User); //true
构造函数方式创建类型的缺点:
对于每一个 User 实例对象getUserByid方法都是一模一样的内容,每一次生成一个实例,都必须为重复的内容多占用一些内存。
alert(user1.getUserByid === user2.getUserByid); //false
function User(userName, userRole) {
this.userName = userName;
this.userRole = userRole;
this.userId = getGuid();
}
User.prototype.getUserByid = function (userId) {
var result = new User(userId);
return result;
};
var user1 = new User("root", "administrator");
var user2 = new User("admin", "administrator");
alert(user1.getUserByid === user2.getUserByid); /**********************************/true
为了配合prototype属性,Javascript定义了一些辅助方法,帮助我们使用它。
isPrototypeOf() 方法用来判断,某个proptotype对象和某个实例之间的关系。
alert(User.prototype.isPrototypeOf(user1)); //true
alert(User.prototype.isPrototypeOf(user2)); //true
hasOwnProperty() 每个实例对象都有一个hasOwnProperty()方法,用来判断某一个属性到底是本地属性,还是继承自prototype对象的属性。
alert(user1.hasOwnProperty("userName")); // true
alert(user1.hasOwnProperty("getUserByid")); // false
in运算符可以用来判断,某个实例是否含有某个属性,不管是不是本地属性。
alert("userName" in user1); // true
alert("getUserByid" in user1); // true
in运算符还可以用来遍历某个对象的所有属性。
for (var prop in user1) {
alert("user1[" + prop + "]=" + user1[prop]);
}
标签:
原文地址:http://www.cnblogs.com/yuantao333/p/4627488.html