将构造函数的作用域赋给新的对象
2015-10-26 19:45
211 查看
创建一个新对象
将构造函数的作用域赋给新的对象
执行构造函数中代码
返回新对象
以上代码最后Jim和Sun中分别保存着Employee的两个不同实例,这两个实例都有一个constructor(构造函数)属性,该属性指向Employee,可以做如下测试
alert(Jim instanceof Employee); //true
alert(Sun instanceof Employee);//true
同时这两个对象又都是Object类型的,可通过如下代码检测。
alert(Jim instanceof Object); //true
alert(Sun instanceof Object);//true
创建自定义的构造函数意味着将来可以把它的实例标石为一种特定的类型,而这也正是构造函数模式胜过工厂模式的地方。
下面详细讲解一下构造函数:
将构造函数当做函数
构造函数与其他函数的唯一区别就在于调用它们的方式不同。但是构造函数也是函数,不存在定义构造函数的特殊语法。其实,任何函数,只有通过new来调用,那他就可以作为构造函数,例如,Employee除了以上用new方法调用外,还可以用如下方式来调用。
//作为普通函数调用
Employee("Sun", 28, "SoftWare Engineer"); //添加到window中
window.sayName();//Sun
//在另一个对象的作用域中调用
var o = new Object();
Employee.call(o, "Sun", 28, "SoftWare Engineer");
o.sayName();//Sum
这样就解决了两个函数做同一件事情的问题,但是新的问题又会出现了,这个在全局作用域中定义的函数,实际上只能被某个对象引用,而且最要命的问题是,如果对象需要定义很多方法,那么就需要定义很多个全局函数,所以这个自定义的引用类型,就没有任何封装性可言了。
将构造函数的作用域赋给新的对象
执行构造函数中代码
返回新对象
以上代码最后Jim和Sun中分别保存着Employee的两个不同实例,这两个实例都有一个constructor(构造函数)属性,该属性指向Employee,可以做如下测试
alert(Jim instanceof Employee); //true
alert(Sun instanceof Employee);//true
同时这两个对象又都是Object类型的,可通过如下代码检测。
alert(Jim instanceof Object); //true
alert(Sun instanceof Object);//true
创建自定义的构造函数意味着将来可以把它的实例标石为一种特定的类型,而这也正是构造函数模式胜过工厂模式的地方。
下面详细讲解一下构造函数:
将构造函数当做函数
构造函数与其他函数的唯一区别就在于调用它们的方式不同。但是构造函数也是函数,不存在定义构造函数的特殊语法。其实,任何函数,只有通过new来调用,那他就可以作为构造函数,例如,Employee除了以上用new方法调用外,还可以用如下方式来调用。
//作为普通函数调用
Employee("Sun", 28, "SoftWare Engineer"); //添加到window中
window.sayName();//Sun
//在另一个对象的作用域中调用
var o = new Object();
Employee.call(o, "Sun", 28, "SoftWare Engineer");
o.sayName();//Sum
这样就解决了两个函数做同一件事情的问题,但是新的问题又会出现了,这个在全局作用域中定义的函数,实际上只能被某个对象引用,而且最要命的问题是,如果对象需要定义很多方法,那么就需要定义很多个全局函数,所以这个自定义的引用类型,就没有任何封装性可言了。
相关文章推荐
- Leetcode -- Sudoku Solver
- java面试题
- AutoLayout_1
- MongoDB 从0开始
- c语言中通过指针将数值赋值到制定内存地址
- linux——read指令
- ps 笔记
- 打字母游戏3
- MFC中使用opencv获取海康摄像头视频
- 大数能否被小数整除 ACM
- 10月24日与10月25日笔记题
- 在Javascript面向对象设计一
- 信息安全系统设计基础期中学习总结
- 智能车学习(六)——OLED屏幕使用
- Tomcat重启负载高问题定位
- 深入理解Canvas Scaler
- Storyboard doesn't contain a view controller with identifier 'UIViewController'
- 对java类override的探讨
- Your project contains error(s),please fix them before running your application
- FRM-40831错误的解决办法?