js方法中的this
2016-06-30 10:48
381 查看
比如有个function:
一个function ServiceMy()的内部的this,就代表这个function本身,具体可以看上面js代码关于myLog和myLog2的注释说明。
关于myLog和myLog2的注释说明:
注意myLog和myLog2这两个function的区别,myLog是全局的,
即在window下定义了一个方法,方法名为myLog,所以即使在ServiceMy()外部也可以直接调用myLog()方法
而myLog2这个方法实际上是在ServiceMy定义了一个属性,这个属性又是一个方法,
相当于window.ServiceMy.myLog2=function(){},所以只能在ServiceMy内部调用,
在ServiceMy这个方法内部,this就代表ServiceMy本身,所以在ServiceMy内部调用内部写好的方法可以使用"this."
的形式进行访问调用。
最终效果可以表示为:
window.myLog = function(){};
window.ServiceMy.myLog2 = function(){} ,这两者的差异一目了然
具体代码:
http://files.cnblogs.com/files/Sunnor/20160630%E6%B5%8B%E8%AF%95%E7%94%A8%E6%9D%A5%E6%B5%8B%E8%AF%95js%E4%B8%ADthis%E7%9A%84%E9%97%AE%E9%A2%98.rar
function ServiceMy(services) { //存放this,用于调试用 var tmp_this = this; this.services = []; console.log(typeof this); console.log(this.__proto__.constructor.name); console.log(this.services == services); console.log(services); console.log(this.services); /** 注意myLog和myLog2这两个function的区别,myLog是全局的, 即在window下定义了一个方法,方法名为myLog,所以即使在ServiceMy()外部也可以直接调用myLog()方法 而myLog2这个方法实际上是在ServiceMy定义了一个属性,这个属性又是一个方法, 相当于window.ServiceMy.myLog2=function(){},所以只能在ServiceMy内部调用, 在ServiceMy这个方法内部,this就代表ServiceMy本身,所以在ServiceMy内部调用内部写好的方法可以使用"this." 的形式进行访问调用。 最终效果可以表示为: window.myLog = function(){}; window.ServiceMy.myLog2 = function(){} ,这两者的差异一目了然 */ myLog = function(msg) { alert("myLog:" + msg); // console.log("控制台:"+msg); } this.myLog2 = function(msg) { alert("myLog2:" + msg); } this.appendServices = function(services) { if (!services) { return this; } //存放 appendServices方法的入参 var tmp_services = services; if (!$.isArray(tmp_services)) { tmp_services = [tmp_services]; } //循环入参 for (index in tmp_services) { if (!tmp_services[index].serviceId || !tmp_services[index].method) { alert('服务定义的入参必须有serviceId和method'); return; } if (tmp_services[index].parameters) { if (typeof tmp_services[index].parameters != 'object' || $.isArray(tmp_services[index].parameters)) { alert('服务定义的参数必须是map形式!'); return; } } } }; //在外部 如果用new的形式构造出一个ServiceMy对象,如果new的时候有参数,那么就调用ServiceMy.appendServices(para)方法 if (services) { this.appendServices(services); myLog('heihi=id'); } this.appendProc = function(proc) { if (!proc) { return this; } tmp_proc = proc; if (!$.isArray(tmp_proc)) { // tmp_proc = [tmp_proc]; } procedure_ = []; //用于存放取出来的数组元素的 for (var index in tmp_proc) { procedure = tmp_proc[index]; if (!procedure.procName) { console.log('你没有传入过程名'); // alert('你没有传入过程名'); // return false; return this; } if (!procedure.parameters) { console.log('你没有传入存储过程需要的参数'); // return false; // alert('你没有传入存储过程需要的参数'); return this; } procedure_.push(procedure); } } }
一个function ServiceMy()的内部的this,就代表这个function本身,具体可以看上面js代码关于myLog和myLog2的注释说明。
关于myLog和myLog2的注释说明:
注意myLog和myLog2这两个function的区别,myLog是全局的,
即在window下定义了一个方法,方法名为myLog,所以即使在ServiceMy()外部也可以直接调用myLog()方法
而myLog2这个方法实际上是在ServiceMy定义了一个属性,这个属性又是一个方法,
相当于window.ServiceMy.myLog2=function(){},所以只能在ServiceMy内部调用,
在ServiceMy这个方法内部,this就代表ServiceMy本身,所以在ServiceMy内部调用内部写好的方法可以使用"this."
的形式进行访问调用。
最终效果可以表示为:
window.myLog = function(){};
window.ServiceMy.myLog2 = function(){} ,这两者的差异一目了然
具体代码:
http://files.cnblogs.com/files/Sunnor/20160630%E6%B5%8B%E8%AF%95%E7%94%A8%E6%9D%A5%E6%B5%8B%E8%AF%95js%E4%B8%ADthis%E7%9A%84%E9%97%AE%E9%A2%98.rar
相关文章推荐
- js实现倒计时功能
- javascript的settimeout和异步
- js 对时间格式化
- 调试JS 出现 ;window.onerror=function(){return!0};
- Javascript定义类(class)的三种方法
- 详解clientHeight、offsetHeight、scrollHeight
- javascript高级程序设计笔记-1
- js共享onload事件
- 原生JS写Ajax的请求函数
- JSP九大内置对象详解
- JavaScript 命名空间规则
- js算法:计数算法 counting sort
- Flaot 转 Json 精度丢失
- 关于JavaScript、javascript与html交互的知识总结
- js实现动画,右移、左移,上移,下移,左上角移动等
- JavaScript在线手册
- 19个很有用的JavaScript库强烈推荐
- js好习惯
- 实现OC与JS的交互
- js控制光标上下移动