js方法中的this
比如有个function:
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(){} ,这两者的差异一目了然
具体代码:
js方法中的this的更多相关文章
- 解决webkit浏览器中js方法中使用window.event提示未定义的问题
这实际上是一个浏览器兼容性问题,根源百度中一大堆,简要说就是ie中event对象是全局变量,所以哪里都能使用到,但是webkit内核的浏览器中却不存在这个全局变量event,而是以一个隐式的局部变量的 ...
- 服务器文档下载zip格式 SQL Server SQL分页查询 C#过滤html标签 EF 延时加载与死锁 在JS方法中返回多个值的三种方法(转载) IEnumerable,ICollection,IList接口问题 不吹不擂,你想要的Python面试都在这里了【315+道题】 基于mvc三层架构和ajax技术实现最简单的文件上传 事件管理
服务器文档下载zip格式 刚好这次项目中遇到了这个东西,就来弄一下,挺简单的,但是前台调用的时候弄错了,浪费了大半天的时间,本人也是菜鸟一枚.开始吧.(MVC的) @using Rattan.Co ...
- 在JS方法中返回多个值的三种方法
在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据,用下面的几种方法都可以实现: 1 使用数组的方式,如下: <html> <head> <title> ...
- 在JS方法中返回多个值的三种方法(转载)
来源:https://www.cnblogs.com/gxsyj/p/6004574.html 在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据,用下面的几种方法都可以实现: 1 使用数 ...
- js方法中参数传过来的值包含括号
前提,传递的id为变量值,比如从后台获取数据循环,在每个循环里调用shenpi()方法,假设传的id包含括号,例如 20190329100833(更正) 这样的数据,那么直接调用会报错,控制台会报错: ...
- 【js】js方法中直接跳转到servlet
function firm_back_state(id,name){ if(confirm("确认返单?")){ location.href="Edit_OrderSer ...
- js方法中拼接html时点击事件中拼接字符串参数
1,代码 var html = '<a href="#" onclick="tableDelete(\''+ row.labelid +'\')"> ...
- tp5模板中js方法中url函数传参的解决办法
代码如下: layer.msg(data.msg, {icon: 1,time:1500,shade: 0.1}, function(index){ layer.close(index); var s ...
- C#后台程序与HTML页面中JS方法互调(功能类似于Ajax中的DWR)
此方法适用于 C#中嵌入WebBrowser(浏览器) 通过浏览器中加载的页面与C#的后台代码进行交互. 一.C#程序 1.在C#窗体中添加WebBrowser(浏览器),将页面的URL添加到浏览器中 ...
随机推荐
- 转: angular编码风格指南
After reading Google's AngularJS guidelines, I felt they were a little too incomplete and also guide ...
- 监控Informix-Url
jdbc:informix-sqli://[{ip-address|host-name}:{port-number|service-name}][/dbname]: INFORMIXSERVER=se ...
- centos 修改shm
Linux下,Oracle 11g的自动内存管理不能指定大于这个/dev/shm的总量内存.否则就会出现如下错误 ORA-00845: MEMORY_TARGET not supported on t ...
- data pump(数据泵)
先给出oracle给出的一个定义: “Oracle Data Pump technology enables very high-speed movement of data and metadata ...
- strdup函数的使用方法
函数名: strdup 功 能: 将串复制到新建的位置处 用 法: char *strdup(char *str): 这个函数在linux的man手冊里解释为: The strdup() func ...
- iOS开发-Protocol协议及委托代理(Delegate)传值
前言:因为Object-C是不支持多继承的,所以很多时候都是用Protocol(协议)来代替.Protocol(协议)只能定义公用的一套接口,但不能提供具体的实现方法.也就是说,它只告诉你要做什么,但 ...
- Windows API中几个函数的总结
[DllImport("User32.dll", EntryPoint = "FindWindow")] public static extern IntPtr ...
- SQL数据库的应用一(Day 24)
哈哈,又到了新的一周.我们也开始学习新的知识了,从今天开始学习SQL数据库的一些知识.今天主要讲了一些数据库.表的创建管理,和一些约束的定义使用.(这里使用的是SQL语句)下面我就具体总结一下. 总结 ...
- TreeSet两种比较
TreeSet底层数据结构是二叉树 判断对象是否一致是通过是对象自身有比较的方法,即使类实现Comparable接口,重写compareTo方法,自己定义比较规则, 若是不想用元素本身的比较方法,又不 ...
- 基于FPGA的key button等开关消抖,按键消抖电路设计
最近要用上一个key消抖的功能.于是找到了之前写的并放入博客的程序,发现居然全部有问题.http://www.cnblogs.com/sepeng/p/3477215.html —— 有问题,包括很多 ...