在javascript中,任何一个函数都可以作为构造函数,只要使用new运算符调用一个函数,那么这个函数就是被当做构造函数使用,代码实例如下:
   [ 其他 ] 运行代码    下载代码
<script>
function antzone(webName){
  this.name=webName;
}
var oantzone=new antzone("51前端");
console.log(oantzone.name);
</script>
以上代码就是将antzone作为构造函数使用。

antzone作为构造函数使用的时候是没有任何问题的,但是如果作为普通的函数使用,this的指向就有可能是其他对象,那么就有可能造成污染,下面就将此代码进行一下改造,代码如下:
   [ 其他 ] 运行代码    下载代码
<script>
function antzone(webName){
  if(this instanceof antzone){
    this.name=webName;
  }
  else{
    return new antzone(webName)
  }
}
</script>
上面代码就可以构建一个相对安全的构造函数,下面就对代码的代码做一下分析:

首先判断this是否是antzone构造函数的实例,如果是的话,那么antzone就是作为构造函数使用,否则就是作为普通函数,当作为普通函数的时候,就强行作为构造函数使用。

特别说明:

如果上面的使用call()或者appy()方式被其他构造函数继承的时候,需要做一下改造,因为在默认状态下this instanceof antzone返回值一般是false,不过如果其他函数继承自antzone就可以了,演示代码如下:
   [ 其他 ] 运行代码    下载代码
<script>
function antzone(webName){
  if(this instanceof antzone){
    this.name=webName;
  }
  else{
    return new antzone(webName)
  }
}
function func(){}
func.prototype=new antzone();
func.prototype.constructor=func;
var ofunc=new func();
antzone.call(ofunc,"51前端");
console.log(ofunc.name);
</script>

代码描述:javascript创建构造函数。javascript创建构造函数代码下载



124 165



用户评论
大牛,别默默的看了,快登录帮我点评一下吧!:)      登录 | 注册



×
×
51前端

注册

×
绑定手机

请绑定手机号,在继续操作

×
单次下载支付

应付金额:279

支付完成后,回到下载页面,在进行下载

官方QQ群
意见反馈
qq群

扫描上面二维码加微信群

官方QQ群

jQuery/js讨论群
群号:642649996
Css3+Html5讨论群
群号:322131262

加群请备注:从官网了解到