js产生对象的3种基本方式(工厂模式,构造函数模式,原型模式)
2024-08-27 20:34:58
1.工厂模式
function a(name){
var b = new object();
b.name = name;
b.say = function(){
alert(this.name);
}
return b
}
函数内部产生b对象并返回。
2.构造函数模式
function Person(name, url) { //注意构造函数名第一个字母大写
this.name = name;
this.url = url;
this.alertUrl = alertUrl;
} function alertUrl() {
alert(this.url);
}
因为每构造一个对象就会生成一个alertUrl方法,这样太浪费资源空间,所以把alertUrl这个方法写在全局以节省空间,但这样写就违背了面向对象编程的初衷,下面的原型模式就更好一些。
3.原型模式
function Person(){
} Person.prototype.name = "bill";
Person.prototype.address = "GuangZhou";
Person.sayName = function (){
alert(this.name);
} var person1 = new Person();
var person2 = new Person(); //测试代码
alert(person1.name); // bill
alert(person2.name); // bill
person1.sayName(); //bill
person2.sayName(); //bill person1.name = "666"; alert(person1.name); //
alert(person2.name); // bill
person1.sayName(); //
person2.sayName(); //bill
我们创建的每个函数都有prototype(原型)属性,这个属性其实是一个指针,指向一个对象。
当构造一个person对象例如person1之后,它的默认name属性就是bill。如果要改name值的话就要对person1.name操作。这只是改了这个对象的name属性。alert(person1.prototype.name)依然是弹出bill,即原型上的name属性
注:这只是本人学习的一些总结,如果有不对的地方还请各位大腿指正!
最新文章
- ceph官网的ceph块设备(二)——快照相关
- ww
- mybatis中foreach的用法(转)
- 微软TechEd2013大会将在北京、上海召开!
- sgu 194 Reactor Cooling(有容量上下界的无源无汇可行流)
- c# List Sort排序
- Square(强大的剪枝)
- C#垃圾回收
- TCP为什么需要3次握手与4次挥手(转载)
- svnserve.conf: Option expected的问题解决方法
- UNIX网络编程——TCP 滑动窗口协议
- 折腾Java设计模式之策略模式
- Python运算符——复合运算符
- SQLServer2008 查询分析器内容未保存,查找分析器内容
- 二叉树,B树,B+树,红黑树 简介
- django 参考
- WinSCP命令行操作
- $.ajax dataType设置为json 回调函数不执行
- 怎么将unbuntu Linux iOS 文件从U盘或者移动硬盘启动?用win32diskimager_cn
- 解决Chrome下表单自动填充后背景色为黄色