注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

snoopyxdy的博客

https://github.com/DoubleSpout

 
 
 

日志

 
 

2011年最后一篇博客——javascript工厂模式小例  

2012-01-21 11:33:38|  分类: web前端技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
2011最后一篇博客拉,一年没搞什么东西,酱油了大半年,以前晟丰软件老板圈钱跑了,都上新浪游戏和qq游戏首页了,还好及时跳槽了,不然这个年都不知道怎么过了,下半年在新单位一直没有找到好的定位,也没在团队发挥什么作用了,公司的几个项目也只是在其一搞了个聊天系统,其余时间都在酱油,研究了1年的node.js发现越研究越深奥,web服务器,linux,数据库等等,还好在年底有个node.js框架rrestjs产出,希望明年2012能有所建树吧,也希望cnodejs越办越好、node.js能在2012有所突破。

年底蛋疼看了下javascript秘密花园,感觉像后花园似的,其中一段挺有道理的,贴上:

javascipt的new function(),在某些情况下会有所不同,我们看下面的例子:

function test(){

this.value = 1;

return this.value;

}

test.prototype = {

getter:function(){alert(this.value)}

}

var x = new test();

var y = test();


x.getter();//1

y.getter();//TypeError: y.getter is not a function


以上是正常的情况,new test()以后可以实例化test这个类,x的getter方法是执行x的原型链prototype上的方法。一切正常,但是当test返回值为非原子类型的时候,比如:数组,对象和function时,同样的代码x是无法将其原型链指向test.prototype。
我们看代码

function test(){
this.value = 1;
return [];// return {}, 或者return function(){} 都是如此
}
test.prototype = {
getter:function(){alert(this.value)}
}
var x = new test();
var y = test();

x.getter();//TypeError: x.getter is not a function
y.getter();//TypeError: y.getter is not a function



最后介绍一下javascript秘密花园里的工厂模式:个人觉得就是单例模式

function test(){

var value = 1;
return {

getter:function(){alert(value)}

};
}
var x = new test();
var y = test();

x.getter();//1
y.getter();//1

所以在new 一个类时要注意,return 返回值不能为非原子类型的值,当然我们也经常这样使用:

function test(){

if(!(this instanceof test)) return new test();
this.value = 1;
}
test.prototype = {
getter:function(){alert(this.value)}
}
var x = test();

x.getter();//1

这样就避免使用了new关键字,同时也可以将x的原型链指向test.prototype上了。
  评论这张
 
阅读(1025)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016