javascript原生移动云编程(编外) - javascript速成答疑
来源:互联网 发布:东航巴黎昆明 知乎. 编辑:程序博客网 时间:2024/05/02 03:02
多数码农会用javascript,但是编程的用法类同Java、C#、C++之类的面向对象编程语言。看了我们的开源实例,提出一些很好的问题,现一一作答。
问:为什么你们写的js,有些地方看上去有点怪?
答:js不是个面向对象的语言,其实是一种函数编程语言,function programming language。javascript的设计参考了Scheme,函数成为第一要素,这不是大家的习惯,看上去会有点怪。然而理解并不难,例如:
var f = function(x) { return x * x;};var y = f(5);alert(y); // 显示5的平方25也就是说,一个函数可以像数据那样赋值给一个变量,然后用变量来调用函数。C++里面支持指向函数的指针,道理一样,但是js的写法要方便太多,你可以不给函数起名字定义它。例子中的函数是个匿名函数。如果我写 var n = 357; 你说我需要给数值357起个名字吗?既然函数能当成普通数据,自然不起名字最方便。javascript的另一个基本要素是object。例如:
var product = { name: "包装盒子", length: 5, height: 7, width: 10, weight: function(unit_weight) { var volume = this.length * this.height * this.width; return unit_weight * volume; }}
这个object对象里,有5个变量字段,前面是普通的字串和数值,最后的是一个匿名函数。看上去挺像Java Class,你可以把"weight“匿名函数想象成一个方法method。在我们做的每一个页面里,initialize就是一个做初始化的函数。为了方便,你可以添加自己的函数。
问:什么是callback,起什么作用?
答:callback就是回调,并非javascript的专利,做UI编程到处可见。callback是一个函数,例如在教程9里面的startPage页面跳转部分:
context.startPage({ nameSpace : 'dev.views.BasicView_1409727629303', // 页面的命名空间 callback : function (feed) { // 发布新数据页面的回调 if (feed) { if (tableView) { // 添加新数据项到已经存在的数据列表 var row = _this.createRow(feed); tableView.insertRowBefore(0,row,true); } else { // 原先还没有数据列表,创建新的数据列表 queryFeeds(); } } } });此处回调函数的作用:页面跳转后,当新页面退出时,系统会调用执行这个callback函数。参数是在新页面中新建的数据项,用feed参数到原来的页面,系统自动调用,把新建的数据项添加到页面里。
问:Ti.UI.SIZE是什么效果?
答:Ti.UI.SIZE是一个常量,告诉Ti所桥接的原生UI,尺寸要自动适应。例如一段文字的文本高度可能只有一行,也可能有三行。具体多少行的高度,就让系统来决定具体尺寸。
问:this是做什么用的? 为什么要写 var _this = this ?
答:既然javascript是个函数编程语言,到处是函数。如果函数在一个object对象里,this就能在代码里引用这个对象。例如前面的object中,函数里引用object product用上了this:
var product = { name: "包装盒子", length: 5, height: 7, width: 10, weight: function(unit_weight) { var volume = this.length * this.height * this.width; return unit_weight * volume; }}
此处,this代表了object product。如果不写this.length,javascript的解释器会认为length没有定义,length的数值是undefined,而不是5。
教程9中,第34行是 var _this = this; 第118行在前面讲解callback回调的代码里,用了这个_this:
var row = _this.createRow(feed);
显然,_this是this的一个替身。这是因为我们要调用页面Object里面的createRow函数。然而callback的函数嵌套在页面函数里,callback函数内部,如何写this,javascript解释器会认为引用当前函数所在的Object,亦即callback所在的做为startPage参数的Object,这样就找不到createRow了。所以我们必须使用一个替身来“记住”页面Object。如果前面没有写替身,还有一个用bind(this)的办法,殊途同归:
context.startPage({nameSpace : 'dev.views.BasicView_1409727629303',//发布页关闭时回调此方法,并传回发布的数据callback : function (feed) {if (feed) {if (tableView) {var row = this.createRow(feed);tableView.insertRowBefore(0, row, true);} else {queryFeeds();}}}.bind(this)});此时bind(this)的意思是“绑定这里”,让this绑定到页面的Object上。由于不直观,初学者不建议用此法。
javascript里面的this问题,或许是最难懂的部分。术语叫closure闭包,每个函数有自己的闭包,this永远指向闭包。
- javascript原生移动云编程(编外) - javascript速成答疑
- javascript原生移动云编程6 - 如何做动画效果
- javascript原生移动云编程2 - 原生移动UI的起点
- javascript原生移动云编程1 - 十分钟做出跨平台原生App
- javascript原生移动云编程7 - 如何调用云数据服务显示实时天气
- javascript原生移动云编程9 - 如何使用云数据库读取和保存数据
- javascript原生移动云编程3 - 比web还简单的页面UI布局
- javascript原生移动云编程4 - 如何做图文并茂的博客页面UI
- javascript原生移动云编程5 - 如何做互动按钮和页面跳转
- javascript原生移动云编程8 - 如何插入任意web页面
- javascript原生移动云编程10 - 如何调用相机并上传下载图片视频
- javascript原生移动云编程11 - 如何调用手机图库中图片
- javascript原生移动云编程12 - 如何用手机录音和播放
- javascript原生移动云编程13 - 通过蓝牙操控智能硬件
- javascript原生移动云编程14 - 如何隐藏和定制屏幕上部的导航条
- 原生javascript
- 原生javascript
- JavaScript之原生拖放(HTML5脚本编程)
- linux中Dcumentation目录下的basic_profiling.txt文档翻译
- 开发小技巧:创建自定义的HTML5输入框验证出错信息
- 《编程之美》学习笔记——指挥CPU占用率
- 2014上海网络赛1004||hdu5045 二分图的最佳匹配 或 状态压缩dp
- haproxy + redis 负载均衡
- javascript原生移动云编程(编外) - javascript速成答疑
- 然而,家乡生活的舒适和安逸,对我的惰性来说,是一大引诱。 -- 彼得.德鲁克 《观察者》
- Java中Collection子接口(2)——Set接口(传智播客毕老师视频讲解)
- 别样JAVA学习(二)语言基础上
- 更新一下研发进度
- HDU 5045 Contest(概率dp,状态压缩,2014上海网络赛1004)
- centos 6.5 6.3安装SSDB
- Spark源码编译
- S5PV210启动流程分析