javascript——构造函数模式
2015-10-21 16:13
477 查看
var o = new Array();
我们创建了一个对象,这个对象是个数组类型,Array就是一个原生构造函数。显而易见,构造函数模式就是让我们知道如果我们要创建一个Person(),如何能使它像Array()一样可以通过new一个类来创建对象实例,且这个对象实例被标记为Person类型
function Person (name, age, job){ this.name=name; this.age=age; this.job=job; this.sayName = function(){ alert(this.name); }; } var person1= new Person("guoshiwei", 23, "web"); var person2 = new Person("Nicholas", 29, "Software Engineer");
这段代码使用构造函数模式,通过构造函数模式创建实例的时候,必须使用new操作符,通过new操作符,实例就被标识为Person类型(构造函数最大的好处)
注意:
Person 首字母要大写,因为构建函数模式它本身也是一个函数,为了区别,构建函数模式的函数首字母大写
通过new创建新实例的过程如下(注释后为个人理解)
创建一个新对象; //在内存中开辟一个空间 object类型对象 所有还没有定义的对象都是object对象
将构造函数的作用域赋给新对象(因此this就指向了这个新对象);//将Person类中的类或方法复制一份放到这个空间中去,此时这个对象变成 Person类型对象 constructor属性指向Person 表明你得到的这些属性和方法来自哪
执行构造函数中的代码(对这个新对象添加属性); //把你的参数代入到这个空间的属性或方法中
返回新对象; //把这个对象连接到person1上
到此为止,一个Person类型的person1对象实例就完成了,但是注意到的是,通过new操作符创建的对象实例,第二步时,我的理解是它是将Person类中的属性和方法复制一份给自己,而不是引用来自Person的属性和方法。(每个属性和方法都是自己的)
alert (person1.sayName == person2.sayName); //false
这就造成了一种不方便(我理解为浪费),那就是每创建一个实例,都要重新生成一个sayName函数。
function Person (name, age, job){ this.name=name; this.age=age; this.job=job; this.sayName=sayName;
} function sayName(){ alert(this.name); } var person1=new Person("guoshiwei", 23,"web"); var person1=new Person("Nicholas", 29,"Software Engineer");
你可以这样在函数外创建sayName函数,这样person1和person2都通过sayName对象引用sayName()方法,但是如果你还需要sayAge, sayJob函数就显的比较麻烦了,一旦你需要的方法多了,就得不偿失,而且降低了Person函数的封装性,所以为了解决这个问题,又出现了一种新的模式——原型模式
相关文章推荐
- js提交表单的单个验证与整体验证
- JavaScript对HTML DOM使用EventListener进行操作
- 常见的页面效果,相关的js代码
- javascript 表格排序和表头浮动效果(扩展SortTable)
- JavaScript对象数组的排序处理方法
- JSF2中轻松使用ajax
- Javascript刷新窗口方法小结
- json转换报错
- 【原创】用JavaScript函数中的arguments对象模拟重载效果
- JS获取浏览器窗口大小 获取屏幕,浏览器,网页高度宽度
- JavaScript简单遍历DOM对象所有属性的实现方法
- js常用工具类(二次更新)
- 陈朱兴-js写法【案例】:
- json知识点总结(解析与序列化)
- js中使用jstl中得到的值
- JS设置cookie,删除cookie
- 洛谷:JSOI2008 最大数
- 详解JavaScript操作HTML DOM的基本方式
- javascript使用小技巧
- js上传图片预览