javascript创建对象总结(下)-收场
在上一篇《JavaScript创建对象总结(中)-关系错乱的原型模式》
我们已经介绍了原型模式跟解决原型模式所导致的问题的解决方法--组合使用构造函数模式和原型模式,从而道清了混论的原型,现在我们就要进行收尾了。
在之前我们介绍的原型模式,是将构造函数与原型模式独立,而我们的动态原型模式则是相反,它将所有信息都写在了构造函数中,最重要的是这样也保持了构造函数跟原型的优点。
function Person(name, age, job) {
// 添加属性
this.name = name;
this.age = age;
this.job = job;
// 添加方法
if (typeof getName !== "function") {
Person.prototype.getName = function() {
return this.name;
}
}
}
var person1 = new Person("xiaoming", 12, "student");
person1.getName(); // xiaoming
上面的例子就展现了动态原型模式的特性,利用判断语句,只有getName()方法不存在的时候,才会将这个方法添加到原型中,这就实现了将所有信息写在了构造函数中了。
注意:使用动态原型模式不能使用我们原型的简写模式。
2.寄生构造函数模式这个模式的基本思想是创建一个函数,而这个函数仅仅用于封装创建的对象,然后在返回新创建的对象。
先看个简单的例子:
// 函数使用工厂模式
function Person(name) {
var obj = new Object();
obj.name = name;
obj.getName = function() {
return this.name;
};
return obj;
}
// 使用new操作符调用函数
var person1 = new Person("xiaoming");
person1.getName(); // xiaoming
其实这个模式的用途是我们在上一篇中已经提及了,就是为了给我们自定义对象添加特殊方法,例如上篇的例子。
// 寄生构造函数模式
function addArrMethod(arr) {
arr.countRepeat = function() {
var list = {};
// this指向arr
for(var i = 0; i < this.length; i++) {
if (! list [this[i]]) {
list[this[i]] = 0;
}
list[this[i]]++;
}
return list ;
}
return arr;
}
var arr = [11, 12, 12, "name", 11, 14, 13,12];
var result = new addArrMethod(arr);
result.countRepeat(); // Object {11: 2, 12: 3, 13: 1, 14: 1, name: 1}
在这个例子中,我们给我们的arr数组对象添加了记录数组各项出现次数的方法。
3.稳妥构造函数模式所谓稳妥那就是没有公共属性,并且其方法也引用this对象。并且稳妥方式与寄生构造函数相似,但有两处不同:
- 新创建对象的实例方法不引用this
- 不使用new操作符调用构造函数
funciton Person(name) {
// 创建要返回的对象
var obj = new Object();
// 没有公共属性
// 添加方法
obj.getName = function() {
// 新创建对象的实例方法不引用this
console.log(name);
}
}
// 不使用new操作符调用构造函数
var person1 = Person("xiaoming");
person1.getName(); // xiaoming
注意:使用稳妥构造函数模式,只能通过添加的方法去访问变量--这也就是稳妥的实质了。(安全性)
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦