同作为JavaScript MVC框架,Backbone和angularjs优缺点各有什么优缺点

同作为JavaScript MVC框架,Backbone和AngularJS各有什么优缺点_百度知道
同作为JavaScript MVC框架,Backbone和AngularJS各有什么优缺点
提问者采纳
-&gt。  支持单向数据绑定,都可以使用Diretives指令的方式完成,直接写到html当中。对象映射。简化DOM中的事件绑定,内容比较多;模型); View)。 但是AngularJS非常重。  AngularJS说实话我没亲自用过,且复杂。不过它是一种MVVM框架。(Model -&gt。然后AugularJS帮你打交道,绝大多数的DOM操作、模型和控制器。API非常简单,基本上学习几个小时就可以轻松上手了,专心关注JS的逻辑和业务。但因为很轻量。而且学习成本高Backbone是一个轻量级MVC框架,所以灵活性好。使用它的优点是。支持双向绑定。通常你可以自由搭配组合各种js库进行定制开发,JS开发人员可以更好的从DOM中解脱出来,没几个。(视图&lt,以一种特殊规则的写法。  我们可以定义我们自己的视图
其他类似问题
mvc框架的相关知识
按默认排序
其他1条回答
分给多点给你详细回答下。
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁同作为JavaScript MVC框架,Backbone和AngularJS各有什么优缺点_百度知道
同作为JavaScript MVC框架,Backbone和AngularJS各有什么优缺点
提问者采纳
Backbone的Model把服务器端的数据模型映射到浏览器端,而这些,实现DOM与数据的互动,基本不必关心Model与UI视图的关系,这样每个数据模型都变成了独立体、与服务器端的数据交互都是非常简单而自由的,而是需要在View中自行操作DOM来更新或读取UI数据,在不同应用中可以直接拿来用。但对比AngularJS。Backbone的View没有把html与JavaScript解耦。虽然我没有真正写过桌面应用程序,directive是通用组件。而Model数据验证。Backbone的Model没有与UI视图数据绑定,我说说我看到的Backbone的缺点,AngularJS内置的通用directive,见谅,你输入特定数据,这点很奇怪,很高效,但我觉得AngularJS的理念就是把WEB当作应用程序来写——Web App,写逻辑控制代码就是用JavaScript操控数据(不是DOM),并提供了若干通用组件和服务,写UI视图就是写正常的HTML/CSS,绑定数据验证机制,都需要程序员在代码中用JavaScript自行实现,并与相应的REST操作绑定。AngularJS只是定义了一个环境和一个数据与视图交互的机制,由于接触时间短,Backbone大概很难实现这样的通用组件,实际上就是用JavaScript控制DOM,UI视图自动更新,可能会存在误解,就能实现大部分操作了,要控制UI视图,通过directive封装,很“原生态”,仅仅提供了数据变更事件通知。Backbone很精巧。比如我要将10个todo批量标记成已完成、madal组件等,比如文章编辑器组件。AngularJS不同,对于数据与UI视图的互动并没有大的改进。我想。AngularJS的directive,直接操作Model就行了。AngularJS与此相反,Model直接与UI视图绑定,却限制REST的灵活性,也就是说,它会发出10个REST请求,Model与UI视图的关系,不同的就是增加了directive,很强大,大概了解了他的运行机制、分页导航组件,这样的directive可以变成了一个html通用组件可以说我对AngularJS了解比较深入了。反观Backbone,它侧重于REST数据交互了,如上所述,减少重复开发,而REST数据交互本来是很容易处理的。Backbone也是一个很热门的JS框架,或者通过第三方模板引擎控制HTML字符串,所以AngularJS开发很简单,方便REST操作,他就能输出相应UI视图,我通读了一下它的API文档
其他类似问题
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁,我是一朵云,飘啊飘!
一天就去中央大街、圣索菲亚教堂、太阳岛看看,一天足矣,因为都挨的很近。然后俄式西餐一定要尝尝,就推荐中央大街的塔道斯。另外中央大街上也有马迭尔冰棍,值得一尝。如果还有一些时间,想尝试下特色的菜肴,建议去道外。那有很多特色的馆子,比如张飞扒肉(扒肉,应该算东北的特色了)、张包铺(排骨包子、各种小菜)、老仁义(清真饭店,蒸饺、羊肉烧卖都不错)等,当然也能顺便看看巴洛克风格的建筑群。另外,强烈推荐一个饭店,就是“老厨家”,他家是锅包肉的创始者。至于锅包肉是什么,我想每个哈尔滨人都对其有格外的感情,非常建议尝一下!最后,要注意下保暖。听说今天哈尔滨还下了鹅毛大雪。
一天就去中央大街、圣索菲亚教堂、太阳岛看看,一天足矣,因为都挨的很近。然后俄式西餐一定要尝尝,就推荐中央大街的塔道斯。另外中央大街上也有马迭尔冰棍,值得一尝。如果还有一些时间,想尝试下特色的菜肴,建议去道外。那有很多特色的馆子,比如张飞扒…
国内使用Backbone.js比较经典的应用就是豆瓣说。正如其名字,Backbone起到了骨骼的作用,我们使用它的自由度很大。对于传统网站,可以说使用不使用关系不是太大,但是对于heavy js的web 站点、app,又或是RESTful为主架构的网站,其数据从后台获取后需要在前端渲染,此时类似于Backbone这样的MVC架构的前端就会使开发变得尤为简单方便。
国内使用Backbone.js比较经典的应用就是豆瓣说。正如其名字,Backbone起到了骨骼的作用,我们使用它的自由度很大。对于传统网站,可以说使用不使用关系不是太大,但是对于heavy js的web 站点、app,又或是RESTful为主架构的网站,其数据从后台获取后需要在…
说一个我常吃的方法,最适合懒人。 芝麻酱很多地方都可以买得到,记得用水调稀释点。加上盐和鸡精,芝麻酱就调好了。 煮好面,过水。然后放上调好的芝麻酱和醋,拌一拌吃,简单又好吃。
说一个我常吃的方法,最适合懒人。 芝麻酱很多地方都可以买得到,记得用水调稀释点。加上盐和鸡精,芝麻酱就调好了。 煮好面,过水。然后放上调好的芝麻酱和醋,拌一拌吃,简单又好吃。
很多人觉得AngularJS要先进于Backbone,我不认同。&br&&br&Backbone正如他的名字-”脊椎“,他是一个小巧灵活的库,是个不错的工具,适合那些有一定Web基础,喜欢原生JS,自己去操作DOM(因为它没有DOM Binding),写一些框架、库、插件的童鞋。它的特点是灵活,并不全包。只是帮你实现一个MVC模式的框架,更多的还需要自己去实现。但是我并不认为这是落后。&br&&br&而AngularJS,真的很强大,可以方便我们快速开发大型Web APP。他的很多概念(比如双向绑定、依赖注入等),也很流行。因此,我更习惯称作它为一个工具集,它把什么都给你”承包“了。是的,你专心写逻辑就可以了。很适合快速搭建应用,学习曲线也较为平缓。但是问题是,你要受制于整个框架。如果你觉得你的程序,使用AngularJS完全可以实现,那么AngularJS确实可以帮你省很多力气。&br&&br&Backbone工具,AngularJS(Ember.js)工具集。看你的需求。
很多人觉得AngularJS要先进于Backbone,我不认同。Backbone正如他的名字-”脊椎“,他是一个小巧灵活的库,是个不错的工具,适合那些有一定Web基础,喜欢原生JS,自己去操作DOM(因为它没有DOM Binding),写一些框架、库、插件的童鞋。它的特点是灵活,并…
我说说东北的,为什么没有。其实是有的,只是名字叫的不是肥猪片,而是猪五花。东北的火锅店里,一般都会有的。把猪五花肉切的薄薄的,还是很好吃的。至于肥羊、肥牛这些,本来也就是外来的说法(相对于东北的火锅)。
我说说东北的,为什么没有。其实是有的,只是名字叫的不是肥猪片,而是猪五花。东北的火锅店里,一般都会有的。把猪五花肉切的薄薄的,还是很好吃的。至于肥羊、肥牛这些,本来也就是外来的说法(相对于东北的火锅)。
10+年的听友怒答:还是很期待健哥的翻唱的,选歌有水准,改编有味道。&br&&br&至于健哥的综艺水平,他已经越来越能适应了,冷幽默还是可以卖的一手好萌的。&br&&br&商业角度,健哥的新专辑也快来了,也是需要借此多宣传一下人气了。&br&&br&最后,最后!&br&&br&其实,其实,我是来占坑的。
10+年的听友怒答:还是很期待健哥的翻唱的,选歌有水准,改编有味道。至于健哥的综艺水平,他已经越来越能适应了,冷幽默还是可以卖的一手好萌的。商业角度,健哥的新专辑也快来了,也是需要借此多宣传一下人气了。最后,最后!其实,其实,我是来占坑的。
所有消费电子产品的屏幕都不需要贴膜。
所有消费电子产品的屏幕都不需要贴膜。
谢谢邀请。&br&&br&建议第一天上午在中央大街、索菲亚教堂附近转转,中午可以吃俄式西餐(中央大街的华梅、塔道斯等,记得点罐羊、红菜汤哦!),中间可以尝试下马蒂尔冰棍、酸奶、冰糖葫芦等小吃。玩到下午,就在宾馆里休息休息,暖暖身,不想休息,就去吃个东北火锅吧。养足精神后,晚上接着逛逛中央大街,夜景还挺好看的。当然,可以在江边走走。6、7点的样子,就可以在防洪纪念塔附近坐公车到冰雪大世界。&br&&br&第一天玩完,肯定冻的不行了。第二天,可以睡个懒觉。然后去道外看看巴洛克的老建筑和吃些特色美食,如:锅包肉、酱骨棒、回民清真、扒肉砂锅等。&br&&br&至于注意事项和准备,那就是一定要保暖。尤其在冰雪大世界,会相当冷。而且玩的过程中(冰滑梯),不免身体里会进雪水。所以建议如下:&br&&br&1、上身:衬衣+毛衣+羽绒服&br&2、下身:棉鞋+线裤(秋裤)+绒裤+毛裤(棉裤)&br&3、玩冰雪大世界记得带点水,周围很贵&br&4、可以贴点暖宝宝之类的
谢谢邀请。建议第一天上午在中央大街、索菲亚教堂附近转转,中午可以吃俄式西餐(中央大街的华梅、塔道斯等,记得点罐羊、红菜汤哦!),中间可以尝试下马蒂尔冰棍、酸奶、冰糖葫芦等小吃。玩到下午,就在宾馆里休息休息,暖暖身,不想休息,就去吃个东北火…
只需要港澳通行证即可,同时需要消耗一次香港签注。方式就是和平时去香港一样,正常过关去HK机场就行(京基百纳广场那也有直接到HK机场的商务巴士(永东巴士),比较方便,就是有点贵,记得是150人民币)。另外值得注意的是,千万不要从蛇口港坐船直接到香港机场(海天客运码头),这个是专门为从深圳出发,从香港飞国外准备的快速通道,乘坐该船必须有护照、目的国机票和目的国签证(免签除外)。最后,注意下时间,过关时间长短不定(坐车过关会快些),提前做好时间安排,以免错过值机截止时间。&br&&br&//由于补充了问题,现再做下补充部分的解答。&br&如果回程由上海飞香港,那么就代表还需要一次签注(只要出关再入关,就算一次签注)。因此,如果你想实现你的行程,定香港到上海的往返,只能办理3月或一年两签,或一年多签才可以实现。
只需要港澳通行证即可,同时需要消耗一次香港签注。方式就是和平时去香港一样,正常过关去HK机场就行(京基百纳广场那也有直接到HK机场的商务巴士(永东巴士),比较方便,就是有点贵,记得是150人民币)。另外值得注意的是,千万不要从蛇口港坐船直接到香…
毛毛水饺,三鲜馅的!
毛毛水饺,三鲜馅的!
个人觉得是google产品的一个重要入口。通过chrome,可以使用所有google的产品,并可以提供差异于其他浏览器的更好的用户体验。更进一步讲,说的大些,就是想让用户只要使用他们的chrome,就可以完成日常办公娱乐。也就是OS了~&br&
个人觉得是google产品的一个重要入口。通过chrome,可以使用所有google的产品,并可以提供差异于其他浏览器的更好的用户体验。更进一步讲,说的大些,就是想让用户只要使用他们的chrome,就可以完成日常办公娱乐。也就是OS了~
Web页面很牛逼的一点就在于他的超链接,超文本、超媒体有它的不可替代性。现在PC侧开放平台的App,大多数也都是基于Web技术构建的,只是看起来更精美些,更针对一些特定用户群。互联网让世界联通,现在App的孤立性显然抵不过超媒体的连接性。而这些所谓的App是有他们的市场的,但是不能因此就说传统的Web将死。&br&
Web页面很牛逼的一点就在于他的超链接,超文本、超媒体有它的不可替代性。现在PC侧开放平台的App,大多数也都是基于Web技术构建的,只是看起来更精美些,更针对一些特定用户群。互联网让世界联通,现在App的孤立性显然抵不过超媒体的连接性。而这些所谓的Ap…
现在的移动互联网就像10多年前的互联网。用户需求、设备环境、商业环境等等,太像了!移动互联网需要一批冲锋陷阵的勇士们,同时也会牺牲掉很多人!但是,不能因为害怕就不去做了。10年前,如果没有那么多公司倒下,也不会有今天的互联网。另,请警惕泡沫!
现在的移动互联网就像10多年前的互联网。用户需求、设备环境、商业环境等等,太像了!移动互联网需要一批冲锋陷阵的勇士们,同时也会牺牲掉很多人!但是,不能因为害怕就不去做了。10年前,如果没有那么多公司倒下,也不会有今天的互联网。另,请警惕泡沫!
国内去过那么多城市,曾几何时,只有深圳和上海市区不拒载。&br&&br&还记得早上从家赶飞机去深圳机场,打到一个空车,朝机场的方向开了一段,师傅很不好意思的说,他要交班。他说我帮你联系下他公司的其他车,他多走的一段不要钱。(很明显的商量的语气,如果我不答应,应该也会拉我。但我表示理解。)好吧,就是这样,结果省了10几大洋到机场了。当时对深圳的感觉,出奇的好,有木有!!!也不拼客!!!&br&&br&不过自从打车软件流行后,深圳的TAXI也开始车窗前放个小黄牌儿,玩儿拒载了。&br&&br&我觉得这个东西,如果不拒载,无非从价钱和监管两方面说:&br&1、深圳的出租车贵啊~计程、计时、夜间费用、返空费、燃油费什么的,在国内绝对是最高的了吧,师傅可以挣到钱;&br&2、监管得力,一旦出问题,主管方可以很快做出反应;&br&&br&当然,如果整个城市的国民素质较高,拒载现象也会有所降低。深圳关内打的士、坐地铁,向来排队的多。
国内去过那么多城市,曾几何时,只有深圳和上海市区不拒载。还记得早上从家赶飞机去深圳机场,打到一个空车,朝机场的方向开了一段,师傅很不好意思的说,他要交班。他说我帮你联系下他公司的其他车,他多走的一段不要钱。(很明显的商量的语气,如果我不答…
界面使用HTML、CSS书写,是采用豆瓣的OneRing技术构建。关于OneRing可以参考 &a href=&/p/onering-desktop/wiki/OneRing& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/p/oneri&/span&&span class=&invisible&&ng-desktop/wiki/OneRing&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&。
界面使用HTML、CSS书写,是采用豆瓣的OneRing技术构建。关于OneRing可以参考 。
因为用友这样的ERP公司不需要艺术家
因为用友这样的ERP公司不需要艺术家
所有组件都遵循CommonJS规范,Browserify组织代码,Grunt做工作流,CNPM存储和管理组件的代码和版本,SVN存储和管理项目的代码和版本。&br&&br&补充下,如果希望遵循CommonJS规范,又实现类似seajs或requirejs的异步加载,推荐使用这个Browserify插件:&a href=&/arian/partition-bundle& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&arian/partition-bundle · GitHub&i class=&icon-external&&&/i&&/a&&br&&br&同时给自己的Browserify插件做个广告,可以把css、html、js打包成一个文件,这样每个模块管理自己的模板、样式和逻辑。再也不怕需求频繁变化所产生的代码垃圾:&a href=&/augustdong/com-browserify& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&augustdong/com-browserify · GitHub&i class=&icon-external&&&/i&&/a&
所有组件都遵循CommonJS规范,Browserify组织代码,Grunt做工作流,CNPM存储和管理组件的代码和版本,SVN存储和管理项目的代码和版本。补充下,如果希望遵循CommonJS规范,又实现类似seajs或requirejs的异步加载,推荐使用这个Browserify插件:
豆瓣的评分挺适合我选片的:&br&0-5分的片子不看;&br&5-7分的片子,我心情不好时会看,不需要思考;&br&7-8分的片子,我是会看的,一般都合我胃口;&br&8-9分的,选择自己喜欢的题材看;&br&9分以上,几乎不看,看不懂;
豆瓣的评分挺适合我选片的:0-5分的片子不看;5-7分的片子,我心情不好时会看,不需要思考;7-8分的片子,我是会看的,一般都合我胃口;8-9分的,选择自己喜欢的题材看;9分以上,几乎不看,看不懂;
当年一起考CUC的时候,几个小伙伴都拿到合格证了(我们的文化课成绩肯定没问题,都是省重点中学重点班)。播音、电编、数媒、音乐都有。好像也没什么潜规则,不过大家能力确实都很强。潜规则不知道有没有,至少我们这几个拿到的肯定木有。&br&&br&P.S.最后只有音乐的那位小伙伴去了,其他人都放弃了合格证,去了其他理工类院校。
当年一起考CUC的时候,几个小伙伴都拿到合格证了(我们的文化课成绩肯定没问题,都是省重点中学重点班)。播音、电编、数媒、音乐都有。好像也没什么潜规则,不过大家能力确实都很强。潜规则不知道有没有,至少我们这几个拿到的肯定木有。P.S.最后只有音乐…
去腾讯,默认给深圳户口啊。&br&&br&我觉得比天津好啊,办理贷款什么的好办不说。&br&&br&最重要的,可以拿香港一年多签啊,办个指纹过关,以后打酱油可以直接去香港买。&br&&br&P.S.户口真的那么重要吗,不是说“农村户口”更值钱,我读书少,你可不要骗我。
去腾讯,默认给深圳户口啊。我觉得比天津好啊,办理贷款什么的好办不说。最重要的,可以拿香港一年多签啊,办个指纹过关,以后打酱油可以直接去香港买。P.S.户口真的那么重要吗,不是说“农村户口”更值钱,我读书少,你可不要骗我。同作为JavaScript MVC框架,Backbone和AngularJS各有什么优缺点_百度知道
同作为JavaScript MVC框架,Backbone和AngularJS各有什么优缺点
提问者采纳
专心关注JS的逻辑和业务。AngularJS说实话我没亲自用过.infoq://&nbsp。中做了一些全面的对比,以一种特殊规则的写法,JS开发人员可以更好的从DOM中解脱出来。&nbsp,都可以使用Diretives指令的方式完成。不过它是一种MVVM框架。通常你可以自由搭配组合各种js库进行定制开发。然后AugularJS帮你打交道。(Model&View)。API非常简单,没几个,所以灵活性好,直接写到html当中;-&模型),基本上学习几个小时就可以轻松上手了.infoq。对象映射Backbone是一个轻量级MVC框架,内容比较多。(视图&lt,你可以查看一下
其他类似问题
mvc框架的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁看到某个答案被顶了几票, 担心会误导新手。&br&&br&angular并&b&不存在定时&/b&脏检测。&br&angular对常用的dom事件,xhr事件等做了封装, 在里面触发进入angular的digest流程。&br&在digest流程里面, 会从rootscope开始遍历, 检查所有的watcher。&br&&br&&a href=&http://atian25.github.io//angular-performace/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&angular性能优化心得&i class=&icon-external&&&/i&&/a&&br&&blockquote&&p&谈起angular的脏检查机制(dirty-checking), 常见的误解就是认为: ng是定时轮询去检查model是否变更。&br&其实,ng只有在指定事件触发后,才进入$digest cycle:&/p&&ul&&li&DOM事件,譬如用户输入文本,点击按钮等。(ng-click)&/li&&li&XHR响应事件 ($http)&/li&&li&浏览器Location变更事件 ($location)&/li&&li&Timer事件($timeout, $interval)&/li&&li&执行$digest()或$apply()&/li&&/ul&&/blockquote&
看到某个答案被顶了几票, 担心会误导新手。angular并不存在定时脏检测。angular对常用的dom事件,xhr事件等做了封装, 在里面触发进入angular的digest流程。在digest流程里面, 会从rootscope开始遍历, 检查所有的watcher。谈起angula…
我觉得取决于 browser vendor 和开发者的支持度。
&br&&br& Web app 的优势是一个固定值(不用开发复杂的 installer 和 auto-updater 了,但是仅此而已)。所以对越复杂的 app 来说,Web 的优势就越边缘化。3D 应用的开发无疑是最复杂的。所以我可以说:3D app 的开发团队不缺这点写 installer 和 auto-updater 的人手。
&br&&br& 第二,Web 的优势领域是 HTML 和 OS 标准都成熟的部分。而标准不成熟的部分就惨了。在 HTML 不成熟的部分,开发者要测试每个 browser,在 OS 标准不成熟的部分,开发者要测试每个 OS。两个都不成熟的部分,开发者要测试 browser x OS 的组合。就 3D 来说,连 OpenGL 都不能说每家的 driver 实现完全一样,也不能说每个浏览器的绑定都一样。
&br&&br& 第三,其它领域的开发倾向使用稳定的技术。而 3D 开发倾向使用最先进的方案。所以 3D 平台要求能快速提供最先进的功能。在 native 平台上不用非标准 EXT 开发 OpenGL 的程序是很少的。最大公约数法则对 3D app 不成立。3D app 讲究的是 aggresive then fail back。
&br&&br& 所以争取到开发者的支持并不容易。
&br&&br&浏览器方面,也说了 Microsoft 不支持。理由也很充分,shader code 的可信度如何保证?这个问题反过来又会降低用户的支持。一团糟。
我觉得取决于 browser vendor 和开发者的支持度。 Web app 的优势是一个固定值(不用开发复杂的 installer 和 auto-updater 了,但是仅此而已)。所以对越复杂的 app 来说,Web 的优势就越边缘化。3D 应用的开发无疑是最复杂的。所以我可以说:3D app 的开…
JSON.stringify 把一个对象转换成json字符串, &br&&br& JSON.parse 把一个json字符串解析成对象。
JSON.stringify 把一个对象转换成json字符串, JSON.parse 把一个json字符串解析成对象。
&b&这种写法存在多种可能性。简单来说就是 add(a) 返回了一个函数,而将 b 作为参数去调用那个函数,又返回一个函数。&/b&&br&&br&&b&但是我来列举一下常见的两种情况吧。&br&&/b&&br&在第一种情况下,后面不能跟无限个();在第二种情况下,后面可以跟无限个()。&br&&br&&b&情形 1:Currying&/b&&br&&b&&br&1.1 举例 &/b&&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&kd&&var&/span& &span class=&nx&&add&/span& &span class=&o&&=&/span& &span class=&kd&&function&/span&&span class=&p&&(&/span&&span class=&nx&&x&/span&&span class=&p&&)&/span& &span class=&p&&{&/span& &span class=&k&&return&/span& &span class=&kd&&function&/span&&span class=&p&&(&/span&&span class=&nx&&y&/span&&span class=&p&&)&/span& &span class=&p&&{&/span& &span class=&k&&return&/span& &span class=&kd&&function&/span&&span class=&p&&(&/span&&span class=&nx&&z&/span&&span class=&p&&)&/span& &span class=&p&&{&/span& &span class=&k&&return&/span& &span class=&nx&&x&/span& &span class=&o&&+&/span& &span class=&nx&&y&/span& &span class=&o&&+&/span& &span class=&nx&&z&/span&&span class=&p&&;&/span& &span class=&p&&}&/span& &span class=&p&&}&/span& &span class=&p&&}&/span&
&span class=&kd&&var&/span& &span class=&nx&&result&/span& &span class=&o&&=&/span& &span class=&nx&&add&/span&&span class=&p&&(&/span&&span class=&mi&&1&/span&&span class=&p&&)(&/span&&span class=&mi&&2&/span&&span class=&p&&)(&/span&&span class=&mi&&3&/span&&span class=&p&&);&/span& &span class=&c1&&// result 是 6&/span&
&/code&&/pre&&/div&&br&&b&1.2 解释&/b&&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&kd&&var&/span& &span class=&nx&&return_1&/span& &span class=&o&&=&/span& &span class=&nx&&add&/span&&span class=&p&&(&/span&&span class=&mi&&1&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&return_1 是 function(y) { return function(z) { return 1 + y + } }。&br&&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&kd&&var&/span& &span class=&nx&&return_2&/span& &span class=&o&&=&/span& &span class=&nx&&return_1&/span&&span class=&p&&(&/span&&span class=&mi&&2&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&return_2 是 function(z) { return 1 + 2 + };注意,return_2 也就是 add(1)(2)。&br&&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&kd&&var&/span& &span class=&nx&&result&/span& &span class=&o&&=&/span& &span class=&nx&&return_2&/span&&span class=&p&&(&/span&&span class=&mi&&3&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&result 实际上是 1 + 2 + 3,也就是 6。注意,result 也就是 return_1(2)(3),所以也就是 add(1)(2)(3)。&br&&b&&br&1.3 关于 Currying&/b&&br&这实际上就是 currying(&a href=&http://zh.wikipedia.org/wiki/%E6%9F%AF%E9%87%8C%E5%8C%96& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&柯里化&i class=&icon-external&&&/i&&/a&),也就是把一个多变量的函数变成一系列单变量的函数。每个函数接收一个参数,然后返回一个接收余下参数并返回结果的新函数。这个过程中利用了&b&闭包&/b&(closure)。也就是说,这种情况下,是&b&一个函数返回另一个函数&/b&。&br&&br&比如上面的例子里,add 接受参数 x 并返回 return_1,return_1 接受参数 y 并返回 return_2,return_2 接受参数 z 并返回最终的值。&br&&br&Currying 实际上是一个很漂亮的技术,你可以给一个参数固定一个参数后再把返回值(也就是接受剩余参数的函数)作为参数传递给其它函数。在 JavaScript 这种重度依赖对回调函数(callback)的使用的语言中,确实能有一些帮助。&br&&br&既然 Currying 可以看作是把 f(x, y) -& z 变换成 f(x) -& (f(y) -& z),那么很明显,后面是不可能跟无限个 () 的;每个 () 只是确定了 Uncurry 之后的函数一个参数而已;并且每个参数的含义是彼此不同的。最多能有几个 (),也就取决于 Uncurry 之后的函数有几个参数。&br&&br&&b&情形 2:函数本身的链式操作&/b&&br&&br&&b&2.1 本质&/b&&br&&b&一个函数返回函数本身&/b&。这种情况下,实际上 a(param) 返回的依然是 a。也就是,你可以无限地在后面追加对这个函数的调用。&br&&br&比如&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&nx&&a&/span&&span class=&p&&(&/span&&span class=&nx&&param_1&/span&&span class=&p&&)(&/span&&span class=&nx&&param_2&/span&&span class=&p&&)(&/span&&span class=&nx&&param_3&/span&&span class=&p&&)&/span&
&/code&&/pre&&/div&实际上不过是&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&nx&&a&/span&&span class=&p&&(&/span&&span class=&nx&&param_1&/span&&span class=&p&&);&/span&
&span class=&nx&&a&/span&&span class=&p&&(&/span&&span class=&nx&&param_2&/span&&span class=&p&&);&/span&
&span class=&nx&&a&/span&&span class=&p&&(&/span&&span class=&nx&&param_3&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&的简写而已,没有任何不同。&br&&br&这样做的前提是, a 函数返回 a 本身。每次 () 的含义是完全一样的,每个 () 里的参数的含义自然也是完全一样的。&br&&br&&b&2.2 更实际的例子&/b&&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&kd&&var&/span& &span class=&nx&&el&/span& &span class=&o&&=&/span& &span class=&nb&&document&/span&&span class=&p&&.&/span&&span class=&nx&&getElementsByTagName&/span&&span class=&p&&(&/span&&span class=&s1&&'body'&/span&&span class=&p&&)[&/span&&span class=&mi&&0&/span&&span class=&p&&];&/span&
&span class=&kd&&var&/span& &span class=&nx&&append&/span& &span class=&o&&=&/span& &span class=&kd&&function&/span&&span class=&p&&(&/span&&span class=&nx&&html&/span&&span class=&p&&)&/span& &span class=&p&&{&/span& &span class=&nx&&el&/span&&span class=&p&&.&/span&&span class=&nx&&innerHTML&/span& &span class=&o&&+=&/span& &span class=&nx&&html&/span&&span class=&p&&;&/span& &span class=&k&&return&/span& &span class=&nx&&append&/span&&span class=&p&&;&/span& &span class=&p&&}&/span&
&span class=&nx&&append&/span&&span class=&p&&(&/span&&span class=&s1&&'I &b&hate&/b& jQuery'&/span&&span class=&p&&)(&/span&&span class=&s1&&' really '&/span&&span class=&p&&)(&/span&&span class=&s1&&' much '&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&&br&&b&2.3 延伸:多个函数的例子&/b&&br&&br&实际上你也可以是有 a、b 两函数;a 函数返回 b,b 函数返回 a。如此,你就可以 a(1)(2)(3)(4)。也就相当于 a(1); b(2); a(3); b(4);&br&&br&当然你也可以有三个或者四个函数互相返回彼此;甚至一个函数 a 根据输入的参数决定返回 b 或是 c。然后 b 和 c 又返回 a 等等……
这种写法存在多种可能性。简单来说就是 add(a) 返回了一个函数,而将 b 作为参数去调用那个函数,又返回一个函数。但是我来列举一下常见的两种情况吧。在第一种情况下,后面不能跟无限个();在第二种情况下,后面可以跟无限个()。情形 1:Currying1.1 举例 …
转一个图(from &a href=&/jayli& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/jayli&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&),看完这个图就大概就知道前端的知识体系结构了,然后找准自己喜欢的方向重点研究&br&&img src=&/368e85f1a418d0ade0edb6_b.jpg& data-rawwidth=&1111& data-rawheight=&1007& class=&origin_image zh-lightbox-thumb& width=&1111& data-original=&/368e85f1a418d0ade0edb6_r.jpg&&
转一个图(from ),看完这个图就大概就知道前端的知识体系结构了,然后找准自己喜欢的方向重点研究
来自子话题:
可以看张晓菲的《锋利的jQuery》,重点是自己理解函数用法并自行实现一些常用的效果。&br&如果需要快速查阅可以用这个api,每个函数都附有简单的示例:&a href=&/browser/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&/browser/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&
(注:这个jQuery库的版本不是最新的delegate等函数在这儿查不到。欢迎补充别的api~)&br&&br&jQuery侧重点就是选择器和基本的DOM操作,还有一些动画操作,但是js中非DOM操作的部分基本没有涉及。&br&&br&其实jQuery的门槛很低,我在看jQuery的时候对原生js的东西也知之甚少,在看的过程中遇到不会的多求助搜索引擎,多尝试,当然最好做一下笔记。&br&测试代码推荐直接在jsfiddle上测试,左侧你可以自行选择需要的jQuery库版本:&a href=&http://jsfiddle.net/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&jsfiddle.net/&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&&br&//=======================&br&有一点需要注意,jQuery只是工具,jQuery学的再好也无法替代原生的js,比如jQuery翻遍了你也不会知道&br&&ul&&li&JavaScript语言中共有几种基本类型&/li&&li&什么是原型&/li&&li&什么是闭包&/li&&li&什么是原型链,作用域链&/li&&li&js只有函数作用域,没有块作用域该怎么理解&/li&&/ul&&br&&br&之于上面的问题,需要再去阅读js的基础书籍:《JavaScript权威指南》,《JavaScript高级程序设计》,《JavaScript语言精粹》等
可以看张晓菲的《锋利的jQuery》,重点是自己理解函数用法并自行实现一些常用的效果。如果需要快速查阅可以用这个api,每个函数都附有简单的示例: (注:这个jQuery库的版本不是最新的delegate等函数在这儿查不到。欢迎补充别的api~)j…
你信社会主义初级阶段么?
你信社会主义初级阶段么?
问题在隐藏部分:&blockquote&发现关注度最高的前三位分别是:C,Python,Javascript。怎么看这种现象?不是说好了“PHP是最好的语言”的么~~&br&&/blockquote&答:普通语言可能有点什么奇技淫巧,PHP 就是奇技淫巧。
问题在隐藏部分:发现关注度最高的前三位分别是:C,Python,Javascript。怎么看这种现象?不是说好了“PHP是最好的语言”的么~~答:普通语言可能有点什么奇技淫巧,PHP 就是奇技淫巧。
来自子话题:
稍微更新点~&br&我就在跟男票学习中。&br&&br&因为本人是新媒体专业(以前是传媒狗),跟互联网的关系还算紧密。&br&然后越发觉得没有点技术性的本领不太行,就想学点简单的编程。&br&目前只是带点兴趣了解,并不会说靠这个来吃饭什么的。&br&只因为自己智商有限(像大学里java学得很烂,差点挂掉? o?o? )。&br&男票不是计算机专业的,他学的是控制,然后硕士学了CE,没有学CS&br&&br&我以前有点点编程基础,HTML算是比较所见即所得,能调动点兴趣,所以我本身最开始只是想学点HTML。&br&然后我想要有点动态效果,所以又加了CSS&br&&br&每次他会做好ppt,然后音频加共享桌面来给我讲解。&br&当然PPT很简单啦,就是这样:&br&&img src=&/676b52d0a7_b.jpg& data-rawwidth=&762& data-rawheight=&430& class=&origin_image zh-lightbox-thumb& width=&762& data-original=&/676b52d0a7_r.jpg&&然后这样:&br&&img src=&/e47a4edfbcabe_b.jpg& data-rawwidth=&766& data-rawheight=&429& class=&origin_image zh-lightbox-thumb& width=&766& data-original=&/e47a4edfbcabe_r.jpg&&&br&很基本的概念讲,然后是例子咯。留点课后思考题,下次由我回答。&br&因为两个人都很忙,加上异国时间差,所以现在才上了两次课呜呜。(异国狗的忧桑&br&&br&从我的角度:&br&如果不是将编程作为职业来学习,妹子只是对编程好奇。&br&那心态大概跟我一样,只是想知道&br&“哇,那个点上去会变颜色是怎么实现的!”&br&“那个下拉菜单又是怎么实现的!”&br&……&br&然后如果自己也能够做出来那成就感满满哦~&br&你在给她讲的时候,可以更多地给例子,不要讲一堆概念。&br&用一些生活中的简单例子类比,这样比较好理解&br&&br&另外,建议可以手把手教妹子自己搭个博客!&br&&br&&br&嘛近期我发现这种上课方式效率太低 远没有我自己看书练习快ˊ_&ˋ&br&毕竟编程这种还是实践来得快&br&于是只在有问题的时候询问他 &br&不匿啦
稍微更新点~我就在跟男票学习中。因为本人是新媒体专业(以前是传媒狗),跟互联网的关系还算紧密。然后越发觉得没有点技术性的本领不太行,就想学点简单的编程。目前只是带点兴趣了解,并不会说靠这个来吃饭什么的。只因为自己智商有限(像大学里java学得…
泻药。这个视频我当初看了就觉得非常精彩,在双语字幕出来后再次推荐。&br&&br&这位演讲者的演讲风格一贯非(脑)常(洞)幽(大)默(开)。有兴趣的人可以看他网站上的其他演讲。重要的是,在幽(脑)默(洞)后有真知灼见。他虚构的历史是否会发生,不好说,也不重要。本来历史就充满了偶然性。且JS的历史本身就充满吊诡。比如正是因为JS有一些巨大缺陷,才有了node.js今天爆发的局面。反过来说,我们也要庆幸JS也有一些极好的设计,使得他能保有这样的可能性。计算机操作系统架构是否会真的发生那样颠覆性的变化?我不知道。但是他的演讲给了我重大的启发。颠覆性的思维方式(创新的动力)是值得我们体会的。
泻药。这个视频我当初看了就觉得非常精彩,在双语字幕出来后再次推荐。这位演讲者的演讲风格一贯非(脑)常(洞)幽(大)默(开)。有兴趣的人可以看他网站上的其他演讲。重要的是,在幽(脑)默(洞)后有真知灼见。他虚构的历史是否会发生,不好说,也不…
来自子话题:
关于这些问题呢,我已经回答不少。首先,我个人认为jqm并不是一个非常好的移动应用框架,首先这个框架里面集成了很多的ui组件。当然这些ui组件可以剥离开,但是这个框架依然显得有点重,而且对于动画,手势得又不及sencha touch。好上手,这是值得肯定得,问题是好用嘛?我个人觉得不好用。&br&&br&对于做Phonegap的应用的话我觉得要抱着写web app的态度去写移动应用。尽可能轻量,ui自己架构自己渲染(因为设计是多变的),手势交互用插件实现(&a href=&http://cubiq.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Matteo Spinelli's Cubiq.org&i class=&icon-external&&&/i&&/a& 这个团队好多累死的插件,当然github还有很多),然后前端架构的话爱用框架可以用框架,也可以自己实现架构方案(我是后者),前端开发过程中可以用一些js模板,还可以用轻量的js选择器jqmobi,帮助你写代码。&br&&br&我觉得如果你真的要找哪款应用是用jquery mobile + phonegap写的话,你只能够在phonegap的官方网站上面找了,因为那里很多example app,你可以作为对比和参考。&br&&br&至于你说如何区分那个app是原生的还是web的,我觉得没有必要,因为要是真的模仿的话,html5已经可以达到以假乱真的地步了,没有这个必要。&br&&br&如果你还想要了解更多,直接奉上本人的开发经验分享ppt:&a href=&/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&您访问的网站不存在&i class=&icon-external&&&/i&&/a& 有关于phonegap开发的经验,客户端的架构,以及技巧等。&br&&br&上面ppt的地址已经消失,大家可以看我最近分享的文章:&a href=&q.com/cn/articles/hybrid-app-development-combat& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&/cn/articles/h&/span&&span class=&invisible&&ybrid-app-development-combat&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&&br&希望对提问的人有帮助。
关于这些问题呢,我已经回答不少。首先,我个人认为jqm并不是一个非常好的移动应用框架,首先这个框架里面集成了很多的ui组件。当然这些ui组件可以剥离开,但是这个框架依然显得有点重,而且对于动画,手势得又不及sencha touch。好上手,这是值得肯定得,…
轮子哥的回答一阵见血,但可能没那么直观,因此我来补充下他的回答吧。&br&&br&一般来说要阐述JavaScript中this的运作机制,有这样一句话诠释的非常贴切。&br&&br&&blockquote& When a function of an object was called, the object will be passed into the execution context as this value&/blockquote&&br&简而言之,就是function的this永远指向调用它的对象。而鉴于JS所谓的“万物皆对象”,这个this因此可以是任何物件,比如Global对象。&br&&br&并且出于某些特殊的原因,我们也可以在编码层显式的、主动的变更其指向,比如利用call/apply等方法。&br&&br&那么回答楼主问,之所以如下的第一段代码得不到你所期待的结果&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&nx&&foo&/span&&span class=&p&&.&/span&&span class=&nx&&prototype&/span&&span class=&p&&.&/span&&span class=&nx&&bar&/span& &span class=&o&&=&/span& &span class=&kd&&function&/span&&span class=&p&&(){&/span&
&span class=&nx&&setTimeout&/span&&span class=&p&&(&/span&&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&sayHello&/span&&span class=&p&&,&/span& &span class=&mi&&1000&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&span class=&kd&&var&/span& &span class=&nx&&expr&/span&&span class=&o&&=&/span&&span class=&kd&&function&/span&&span class=&p&&(){&/span&
&span class=&nx&&alert&/span&&span class=&p&&(&/span&&span class=&k&&this&/span&&span class=&p&&.&/span&&span class=&nx&&myName&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&span class=&nx&&foo&/span&&span class=&p&&.&/span&&span class=&nx&&prototype&/span&&span class=&p&&.&/span&&span class=&nx&&bar&/span& &span class=&o&&=&/span& &span class=&kd&&function&/span&&span class=&p&&(){&/span&
&span class=&nx&&setTimeout&/span&&span class=&p&&(&/span&&span class=&nx&&expr&/span&&span class=&p&&,&/span& &span class=&mi&&1000&/span&&span class=&p&&);&/span&
&span class=&p&&}&/span&
&span class=&c1&&//首先,这两段代码在你的case里基本是等同的。&/span&
&span class=&c1&&//楼下有人说setTimeout是干扰项,事实上,在这里,我认为&/span&
&span class=&c1&&//setTimeout(this.sayHello,1000)里的this.sayHello才是真正的干扰项。&/span&
&/code&&/pre&&/div&其次,当我们用setTimeout来向eventLoop注册函数时,函数是由引擎来发起调用的,因此这个调用者/caller会自动绑定为window,而同时一个函数在引擎内部的原型实际上大概是这样的形式(你写代码的时候可以脑补一下)。&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&nb&&Function&/span&&span class=&p&&.&/span&&span class=&nx&&invoke&/span&&span class=&p&&(&/span&&span class=&nx&&caller&/span&&span class=&p&&,&/span&&span class=&nx&&arguments&/span&&span class=&p&&)&/span&
&span class=&c1&&//这里的caller就是最终this会指向的对象,也就是轮子哥说的“this是被传进来的”。&/span&
&/code&&/pre&&/div&所以在发生sayHello调用时会变成&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&nx&&sayHello&/span&&span class=&p&&.&/span&&span class=&nx&&invoke&/span&&span class=&p&&(&/span&&span class=&nb&&window&/span&&span class=&p&&,[])&/span& &span class=&o&&=&&/span& &span class=&p&&{&/span& &span class=&nx&&alert&/span&&span class=&p&&(&/span& &span class=&p&&[&/span&&span class=&nb&&window&/span& &span class=&nx&&as&/span& &span class=&k&&this&/span&&span class=&p&&].&/span&&span class=&nx&&myName&/span& &span class=&p&&)&/span& &span class=&p&&}&/span&
&/code&&/pre&&/div&而此时,window.myName 并没有被代码所声明过,因此 return
=&undefined。&br&&br&而当你明白 Function.invoke(caller,arguments) 这个&i&实现原型&/i&后,你也就明白了为什么call和apply可以更改this指向,差不多就是如下的模型。&br&&div class=&highlight&&&pre&&code class=&language-text&&Method fn.apply (caller,arguments)
=& return fn.invoke(caller,arguments)
&/code&&/pre&&/div&&br&&br&&br&如果看不懂....那么再教你一招,每次写JS代码发现this不受控制的时候,就把我上文引用的英文念一遍,其义自现(想想这个函数有没有owner,如果没有owner那this通常就是window,大部分情况下owner既caller)。
轮子哥的回答一阵见血,但可能没那么直观,因此我来补充下他的回答吧。一般来说要阐述JavaScript中this的运作机制,有这样一句话诠释的非常贴切。 When a function of an object was called, the object will be passed into the execution context as this…
&div class=&highlight&&&pre&&code class=&language-js&&&span class=&kd&&var&/span& &span class=&nx&&a&/span& &span class=&o&&=&/span& &span class=&p&&[&/span&
&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span&
&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span&
&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span&
&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span&
&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span&
&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span&
&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span&
&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span&
&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span&
&span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&&span class=&p&&,&/span& &span class=&mi&&0&/span&
&span class=&p&&];&/span&
&/code&&/pre&&/div&原答案的解释正如&a href=&/people/zecy& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&zecy&i class=&icon-external&&&/i&&/a&的答案一样,有个好编辑器,这种还是非常方便输入的。同时用直接量是性能最好的。&br&不过我觉得还可以补充一个,大多数人没有想到的类型化数组:&br&&div class=&highlight&&&pre&&code class=&language-js&&&span class=&k&&new&/span& &span class=&nx&&Int8Array&/span&&span class=&p&&(&/span&&span class=&mi&&100&/span&&span class=&p&&);&/span&
&/code&&/pre&&/div&它的元素默认初始化为0。
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0…
不管是什么语言,重构要保持健壮性靠的都是大量的单元测试。这不是脚本独有的问题。
不管是什么语言,重构要保持健壮性靠的都是大量的单元测试。这不是脚本独有的问题。
coffeescript就是一种简单的语法糖,但在减少代码量、提高可读性方面作用巨大,特别是要写很多js代码的情况,减少了js冗余代码的干扰,所以在node.js社区非常受欢迎。&br&&br&很多人一看到coffeescript会把它当成一种编程语言,其实不是,学习成本更是低得可怜,花半个小时就能掌握。官网上还有try on line功能,可以试下。&br&&br&rails社区也已经将coffeescript作为内置的编译工具,就是说在rails中写js,不再是写原生的js代码,取而代之的是写coffee代码。&br&&br&用coffee写过js代码的人,很少会再用原生的js去写了。
coffeescript就是一种简单的语法糖,但在减少代码量、提高可读性方面作用巨大,特别是要写很多js代码的情况,减少了js冗余代码的干扰,所以在node.js社区非常受欢迎。很多人一看到coffeescript会把它当成一种编程语言,其实不是,学习成本更是低得可怜,花…
来自子话题:
毫不夸张的说,&a href=&& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Worktile &i class=&icon-external&&&/i&&/a&是&a href=&http://mean.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Mean&i class=&icon-external&&&/i&&/a& Stack的践行者、受益者和反思者。我们是国内少用基于MEAN架构的系统,在整个开发过程中受益匪浅,但也遇到很多瓶颈和问题,虽然都有解决的办法,但趟出一条路毕竟需要更多的投入。&br&&br&回到问题,我们自己的经验是对Angularjs的后端,其实没有什么是适合不适合,Angularjs本身就是解决前端问题,所以任何后端系统,不管是Java、.NET、Php或者Nodejs其实都是一样的。最关键的是,你的团队更胜任哪个技术体系。但是, &a href=&http://mean.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Mean&i class=&icon-external&&&/i&&/a& Stack的组合优势在于,已经在每个点上有足够多的经验、框架和模块来吃撑,而且大多基于开源的系统,你能找到世界上最优秀的答案;另外一个优势就是轻量,足够的轻量就可以有足够的把控和发挥,无需深陷在例如ASP .NET这种隐藏很多底层问题的厚重系统之上,对于性能、扩展和伸缩性的处理可以有更多能力,当然前提是你自己的技术能力也要有足够的匹配。&br&&br&&a href=&http://mean.io/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Mean&i class=&icon-external&&&/i&&/a& Stack是值得一试的,不信你看看&a href=&/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Worktile &i class=&icon-external&&&/i&&/a&就知道,当然我们在典型的Mean架构下有很多自己的扩展,包括服务层、数据层、缓存层都有更多的考虑和完善。
毫不夸张的说,是 Stack的践行者、受益者和反思者。我们是国内少用基于MEAN架构的系统,在整个开发过程中受益匪浅,但也遇到很多瓶颈和问题,虽然都有解决的办法,但趟出一条路毕竟需要更多的投入。回到问题,我们自己的经验是对Angularjs的后…
太好了,终于又可以吐槽Backbone。&br&&br&我搞不懂为什么现在还有人用Backbone,它的流行就是一种病毒般传染的恶性循环。不过目前情况有点改观,感觉很欣慰。&br&&br&Backbone唯一的优势在于学习成本,对于不会如何组织自己的应用程序和懒得去接受比较高级的概念的人来说,Backbone是非常好的选择。吐槽一下Backbone:&br&&ol&&li&几乎什么都没干。&br&&/li&&li&没有data-binding。纵观这么多MV*框架,Backbone是在这点上最偷懒的一个。所有data和view的数据绑定都要靠自己用事件来绑定。&br&&/li&&li&SPA很重要一个需要解决的问题就是视图的嵌套和视图的组合。Backbone你需要搭配一个 &a href=&/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Marionette.js&i class=&icon-external&&&/i&&/a&或者&a href=&http://chaplinjs.org/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Chaplin &i class=&icon-external&&&/i&&/a&才好得心应手。&br&&/li&&li&视图爆炸。基本上需要的逻辑都要在view里面处理,view又有复杂的嵌套关系。view会非常的零散,加上view之间依赖,基本上没有扩展性可言。为了解决这个问题,当年还写了一个插件&a href=&/posite& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&posite &i class=&icon-external&&&/i&&/a&来解决&br&&/li&&li&相对而言,可维护性和可扩展性极差。虽然Angular库体积本身比Backbone大,但是如果你构建的是一个比较大型的App,最终你用Angular写的代码会比Backbone要少很多,而且不是一两倍的问题。&br&&/li&&li&...&/li&&/ol&&br&好了,虽然这样说,Backbone还是有优点的,例如体积比较小,学习成本低。所谓的缺点,其实这也是本身Backbone的哲学所决定了它一些实现。&br&&br&用Angular,它包含很多复杂的概念,也许不懂它为什么要加这么多乱七八糟的东西,但是慢慢地你就会了解一切都是有它存在的原因的。如果你在没有用Angular之前,构建过大型的SPA,并且经过蛋疼的几次大重构以后,就会发现Angular所有的东西filter,service,BDD Test等等的存在都是合理的。有一句话不知道听过没有,大概是这样的:一个程序员不学数据结构与算法,那么他编程一辈子的经验就可以写成一本“数据结构与算法”。&b&Angular的情况也大概一样,它是一群人很多年蛋疼的经验所总结出来的东西,我们就不要走弯路了。&/b&&br&&br&但是,Angular很多时候是小题大作,为了让新手们能够不犯低级错误,它做了很多限制。对于前端框架,我认为其实没有必要做这么复杂。一个data-binding的库,加一个事件处理库,加一个动画库,加以一些模块化技巧,就可以松松实现Angular主张的一些东西,搞定各种SPA。&br&&br&打字太烦,一句话总结:&b&如果你看重学习成本,选Backbone;如果你看重以后的可维护性,用什么都好,不要用Backbone,至于移动端问题相信楼上几位大大已经给出答案。&/b&
太好了,终于又可以吐槽Backbone。我搞不懂为什么现在还有人用Backbone,它的流行就是一种病毒般传染的恶性循环。不过目前情况有点改观,感觉很欣慰。Backbone唯一的优势在于学习成本,对于不会如何组织自己的应用程序和懒得去接受比较高级的概念的人来说,…
来自子话题:
最大的优势就是它是从头重新写起的。原来的Wordpress无论是代码架构、具体实现、设计、决策过程到开源协作模式都已经变得过时而臃肿,加上大量第三方插件对特定实现的依赖,任何大改动都牵一发而动全身,开发效率变得极低。&br&&br&相比之下,Ghost全新的团队,依托Node(可以说是目前开源活跃度最火爆的社区)和Github(Wordpress至今用着自己的svn trac,github上只有一个镜像),我相信Ghost的开发改进速度会比Wordpress高上一个数量级,开源参与度也会很快超越。&br&&br&顺道吐槽一下WP的前端,基本是jQuery大拼盘,每做一件事情就要重载页面,而且整个前端只有一个功能有测试,那就是密码强度提示...(见 &a href=&http://develop.svn.wordpress.org/trunk/tests/qunit/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&- Revision 25846: /trunk/tests/qunit&i class=&icon-external&&&/i&&/a&)这种codebase我看了就没有贡献的欲望了...
最大的优势就是它是从头重新写起的。原来的Wordpress无论是代码架构、具体实现、设计、决策过程到开源协作模式都已经变得过时而臃肿,加上大量第三方插件对特定实现的依赖,任何大改动都牵一发而动全身,开发效率变得极低。相比之下,Ghost全新的团队,依托…
这里是稍稍优化后的 transformers.js:&br&&a href=&/1094736& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&/1094736&/span&&span class=&invisible&&&/span&&i class=&icon-external&&&/i&&/a&&br&&br&如 SUN Ruoyu 所说,通过 JavaScript 去操作 DOM。大量用到 clip [1] 这个 CSS 属性。如果有兴趣可以看 baidu.zhidao.Sketchpad 这个 Object 下面的方法 [2],主要的如 render, scale, dismiss, draw 都在这里。动画的坐标都是之前放在数组里的。&br&&br&没用到 canvas 之类的新东西。&br&&br&[1] &a href=&.cn/css/pr_pos_clip.asp& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://www.&/span&&span class=&visible&&.cn/css/pr_&/span&&span class=&invisible&&pos_clip.asp&/span&&span class=&ellipsis&&&/span&&i class=&icon-external&&&/i&&/a&&br&[2] 在 transformer.js 里搜 &baidu.zhidao.Sketchpad.prototype&
这里是稍稍优化后的 transformers.js:如 SUN Ruoyu 所说,通过 JavaScript 去操作 DOM。大量用到 clip [1] 这个 CSS 属性。如果有兴趣可以看 baidu.zhidao.Sketchpad 这个 Object 下面的方法 [2],主要的如 render, scale, dismiss, dr…
首先 &b&Backbone&/b& 没有&b& AngularJS &/b&那么容易上手. 而且作者并没有想让Backbone草根化的意思.&br&&br&&b&Backbone 比喻成战斗机&/b&. 看上去更像是真正的MVC框架, model-views-controller(collection).&br&书写Backbone的时候模型, 集合数据, 视图都是分开的, 逻辑很清晰. js模版的好处自然不用多说.Backbone实际上是&b& (( 为了去除掉以往 jQuery 过分依赖DOM来写业务逻辑, 导致后期代码逻辑混乱,DOM和JS上紧耦合. 函数内部层层调用, 甚至还会出现各种夸多个文件层层调用.使得业务最终变得难以维护,越来越臃肿,功能耦合度越高.修改起来就越容易导致其他功能出现难以预料的BUG . )), 而Backbone则很大程度上解除DOM和JavaScript的耦合关系. 更接近MVC的真谛. &/b&但是Backbone只提供基本的工具. 没有进行更加复杂的封装.&br&&b&Backbone 的优势 &/b&:&br&&ol&&li& 体积小, 制定性很强.&br&&/li&&li&提供underscore工具函数, 按照每个程序员不同的Style来处理数据, 或者你自己封装&/li&&li&提供自定义模版引擎, 也就是说, 你想怎么渲染, 就怎么渲染&/li&&li&提供完整的RESTful 风格API.想怎么写就怎么写. &/li&&li&模型 , 集合, 视图分离. 逻辑清晰. 只要是个稍微懂规范的程序员, 都可以写出不错的逻辑结构. &/li&&/ol&&br&&b&AngularJS 比喻成坦克.
&/b&看上去更加像是弥补HTML构建应用的不足(官方自己这样描述的).把JS逻辑和HTML标签紧密结合在一起, 通过依赖注入, 来实现开发模块化. AngularJS的确提供了很多的遍历, 封装了很多复杂逻辑, 双向数据绑定. 逻辑区域划分. 所以它是重武器.&br&&b&------------------------------------- 插入 写在这里 -------------------------------------------&/b&&br&&b&Pass :
关于Google 为什么力推 AngularJS? 而不推MVC的鼻祖Backbone&/b&&br&
首先是兼容性方便, &b&Backbone&/b& 坚持支持IE6以上的浏览器, 原则就是希望大部分浏览器都可以跑Backbone. Angular 在这方面就截然相反了. Angular 由于库本身非常庞大, 模块很多, 为了不让库变的臃肿, 在 &b&AngularJS&/b& 1.3 之后就不支持IE9以下的浏览器了( IE9上也有很多问题 ). 也就是说, AngularJS 开发就是针对一些高端的APP. 高端的应用, 换而言之, 一般来说 一些懂一点电脑的用户都知道升级浏览器, 而其中Google 的体验最好.&br&所以Google 首先力推Angular , 你看不了网站, 被提示版本过低,要么不以后都不看, 要么你会选择升级浏览器, 或者换浏览器, 我想大多数都会升浏览器.&br&AngularJS 对一些技术含量比较低的搜索引擎来说非常不友好, 没有什么原因. 像Google 的搜索技术已经摇摇领先全世界了, 而且爬虫可以识别JS渲染之后的数据. 这也是为什么Google力推Angular的原因之一/&br&&b&------------------------------------- 小段结束 -------------------------------------------&/b&&b&&br&AngularJS 的优势:&/b&&br&&ol&&li&容易上手, 必须了解依赖注入&/li&&li&少量代码就可以完成双向数据绑定. 自动同步改变数据. Backbone需要自己手动&/li&&li&和HTML结合在一起写逻辑. HTML结构有清晰的划分. &/li&&li&脏值检测. &/li&&li&不依赖其他第三方库&/li&&/ol&&br&&b&1.Backbone 和 AngularJS 比实际上主要优势是在移动端&/b&,&b&还有它的兼容性&/b&, &b&Backbone 组合兼容IE6 - IE11 后现代浏览器都没问题。 AngularJS 撑死就兼容到了IE8&/b&,还有很多功能在IE8上都有问题。 而且AngularJS通过对标签添加自定义属性 和 混入模板 来执行操作。所以对于搜索引擎而言, 非常不友好, &b&无论你是通过混入模板的方式 如{{ item.data }}
还是通过自定义属性 ng-model = “item.data” 来给你标签绑定模型。搜索引擎都无法读取到你标签内部真实渲染后的数据。而读取到{{ item.data }} 这样的模板.(大多数爬虫都是忽略掉页面js的影响的.) . 对SEO很不利。&/b&&br&&br&&br&&b&2.Backbone 和 AngularJS 体积上来看, 并没有什么优势可言,&/b&(不算站点开启了gzip) 一个表面上&b&压缩过的AngularJS 大概是101k -120k &/b&(没有压缩的开发者版是800K以上,1.2.X版本). 不需要依赖什么其他的js库。&br&而Backbone 依赖 Underscore.js
压缩后 Backbone + Underscore = 20k + 14k = 34k ~ 36k的样子。 别高兴的太早的, Backbone 还需要引入一个核心库。类似于jQuery这样的。 PC开发时,引入一个压缩过的jQuery1.11.1 是101k~105k,不兼容IE6 7 8 引入压缩后的 jQuery 2.0以上版本是 89K ~ 94k。 所以大小加起来 &b&Backbone + Underscore + jQuery = 130k ~ 145k 。&/b&&br&如果是移动端的开发,不需要引入jQuery ,而是使用Zepto的话。Backbone组合的大小就骤降到了 44k~50k. 这个时候Backbone在移动端的优势就体现出来了。&br&&b&而这样一来. Backbone + Underscore + jQuery(or Zepto) 就比一个AngularJS 多出了2 次HTTP请求.&/b&&br&&br&&br&&b&3. 这里注意一下, Backbone自己描述是非必要! 非必要!依赖jQuery 和 Zepto. 实际上它没了jQuery 它的View视图就会各种出错, 所以说白了, 他自己就跟jQuery绑在了一起. 要换其他DOM库你还得自己操作,老版本的Backbone还根本就没有提供你改库的权利.&/b&&br&&b&Backbone 表面说不依赖jQuery. 实际上.... 呵呵, 你懂的, 没有jQuery你视图怎么绑定在DOM上? el 根本就不支持类似于 document.getElementByxxxx这样的获取DOM节点.所以我想说, 你如果不想在项目里搞太多库, 找AngularJS. Backbone进去了你就必须用个jQuery!&br&&/b&&br&&b&如果有Ruby开发经验的人就知道, Backbone实际上是把Ruby on Rails给放到前端来了,Ruby程序员对Backbone的结构会是再了解不过了.&/b&&br&&br&&b&1.Backbone&/b&的实例非常少.冰山一角.&br&&b&2.Backbone&/b&是一个Framework,而不是个Library.&br&&b&3.Backbone&/b&只提供了工具函数 small、simple、flexible , make sense. 也就是它和jQuery不太一样的地方,不是&b&&write less , do more&&/b&&br&&b&4.Backbone&/b&并没有减少代码的编写量,用不好反而增加不少工作量, 一个原本看似简单的功能,用Backbone现实起来看起来总感觉会很别扭. 所以用不好的人就是会&b&&write more. do less&&/b&&br&&b&5.Backbone能不能发挥它的极致完全取决于使用者的水平, 所以作者对FrameWork理解是: &a framework calls you, you call a library&&/b&&br&&br&&br&&b&对于一个新手而言, 不具备一定的原生JavaScript功底是很难驾驭Backbone, 仅仅局限于会用几个$符号来是完全不能理解Backbone的哲学的.&br&&/b&&br&&b&Backbone&/b&到目前为止都没有完整的中文文档, 之前有个人翻译了0.5版本的中文文档(基本可以说他没有翻译...), 但是目前Backbone已经是1.0版本以上了. 比之前新增了不少的功能.
可以说, 想学的人,就算你看得懂英文, 看得懂API, 没有实例, 你也不知道怎么样应用. 市面上的书籍也非常少.\&br&而能把Backbone发挥到极致的, 一般都是老外, 比如说,著名的USATODAY就使用了Backbone. 你很难想象一个全美大型的新闻网站是一个Backbone打造的&b&SPA (注: SPA在国外的应用已经非常普遍了, 见怪不怪,反观国内Web技术可以说还是落后人家5-6年&/b&&b&)&/b&&br&&a href=&/& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&USA TODAY: Latest World and US News&i class=&icon-external&&&/i&&/a&&br&&br&&b&从 Backbone在GitHub 上的18258个Star就足够证明它在国外的地位. (注:&/b&&b&&a href=&/jashkenas& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&Jeremy Ashkenas&i class=&icon-external&&&/i&&/a& 08年入驻GitHub. 非常深厚的原生JavaScript背景.&/b&&b&)&/b&&br&&br&反观&b& AngularJS , &/b&中文文档不少, 网上也有不少实例, 上手较Backbone来说要容易一些.&b& 而且AngularJS 没有必要强制依赖其他库.而Backbone本身就依赖作者&a href=&/jashkenas& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&& Jeremy Ashkenas&i class=&icon-external&&&/i&&/a& 自己开发的另外一个JS工具包UnderScore 可以说你想要学好Backbone, 就不得不去了解和学习UnderScore. 而UnderScore总共有60多个针对数组,集合,函数操作的Method. 只有在项目中实践了才可以说真正理解了UnderScore的用途. 这也造成了 Backbone 学习曲线陡峭&/b&, 尤其是对于那些本身对MVC就不了解的新手来说, Model, Collection 理解起来可以说是晦涩难懂.
首先 Backbone 没有 AngularJS 那么容易上手. 而且作者并没有想让Backbone草根化的意思.Backbone 比喻成战斗机. 看上去更像是真正的MVC框架, model-views-controller(collection).书写Backbone的时候模型, 集合数据, 视图都是分开的, 逻辑很清晰. js模版的…

我要回帖

更多关于 angularjs mvc 的文章

 

随机推荐