如何必须用new来实例化function
2017-01-11 09:30
465 查看
我们知道使用function可以用new来实例化,那么为啥要用new?以及在代码中我们能否控制队友写代码时必须写new呢?
上面定义了一个函数,我们可以通过下面两种方式来调用:
两种方式都能正常执行。那么它们有什么区别呢?
我们发现两种调用方式,
下面用代码证明
回顾 - 前面我们做了这样的代码结构
var God = { //... }; //这是母体,用来加工和扩展业务对象
var news = {}; //这是业务对象。用来传递约定好的方法和参数给母体 God.extends('news',news); //扩展方法
如何必须用new来实例化function
var GodClass = function(){ alert('god'); }
上面定义了一个函数,我们可以通过下面两种方式来调用:
//方式1 GodClass(); //'god' //方式2 var God = new GodClass(); //'god'
两种方式都能正常执行。那么它们有什么区别呢?
var GodClass = function(){ alert(this); } //方式1 GodClass(); //[object Window] //方式2 var God = new GodClass(); //[object Object]
我们发现两种调用方式,
this不一样。
GodClass()方式,
this委托给了Window对象;
new GodClass()实例化的方式,
this指的就是实例化后的对象。
下面用代码证明
var GodClass = function(){ this.name = 'zhangsan'; } var God = new GodClass(); console.log(God.name); //'zhangsan' //通过实例化后的对象拿到了函数内部this的属性值
var GodClass = function(){ this.name = 'zhangsan'; } GodClass(); console.log(Window.name); //'zhangsan' //注意:浏览器运行,才有Winodow这个宿主对象
我们能否控制队友写代码时必须写new呢?
var GodClass = function abc(){ if(this instanceof abc){ this.name = 'zhangsan'; }else{ console.log('不要胡搞'); } }
GodClass(); //'不要胡搞' var God = new GodClass(); console.log(God.name); //'zhangsan'
相关文章推荐
- 图片压缩
- POJ3630/HDU-1671 Phone List,字典树静态建树!
- 设计模式:观察者模式-observer
- workerman
- hdu Monkey and Banana(DP)
- hdu Monkey and Banana(DP)
- Android系统源码编译
- hdu Monkey and Banana(DP)
- hdu Monkey and Banana(DP)
- hdu Monkey and Banana(DP)
- hdu Monkey and Banana(DP)
- BulkWrite objects may only be executed once
- hdu Monkey and Banana(DP)
- hdu Monkey and Banana(DP)
- .NET url 的编码与解码
- hdu Monkey and Banana(DP)
- hdu Monkey and Banana(DP)
- hdu Monkey and Banana(DP)
- hdu Monkey and Banana(DP)
- hdu Monkey and Banana(DP)