这里我说出自己的浅薄的理解,希望大家可以共鸣!

call一些装逼的用法:

call的用法通常在两个地方会用到,

1.需要加一个层的时候,也可以不准确的说继承的时候,继承是继承父类的属性或者方法,而aop面向切面的思想中,我们可以清晰的感到,加层的好处,如果在js的代码中,我们开始考虑用加一个层做一些统一的额外操作,或者额外的功能的时候,可能用call.

2.还有一个地方,就是我们通常,喜欢封装一个class或者object对象,比如类a或者b,当a调用b后,在b中可能会有很多的操作用到a中的对象属性,或者方法,这个时候我们希望极少的传入一个this或者一个obj,就可以操作一个这个对象内部的所有的东西,这个时候就会考虑用call.

3. 也可以说是2的补充,当我们的代码是

var ad = {

a:function(){

var self = this;

},

b:function(){

var self = this;

self.a();

}

}

在别的地方调用ad.b()会发生作用于错乱的情况,如果用ad.b.call(ad);这样子就避免了,域的错乱

举例:

1.加一个层

//BaseModel
'use strict';
function BaseModel() {
this.Members = {};
}
BaseModel.prototype.init = function (obj) {
if (obj && typeof obj == 'object') {
for (var key in this.Members) {
if (typeof obj[key] != 'undefined') {
if (typeof this.Members[key].default != 'undefined') {
this[key] = obj[key] || this.Members[key].default;
} else {
this[key] = obj[key];
}
} else {
this[key] = this.Members[key].default || "";
}
}
} else if (arguments.length > 1) {
this.initWithData.apply(this, arguments);
}
};
BaseModel.prototype.ado = function () {
var ado = this;
delete ado.Members;
return ado;
};
BaseModel.prototype.ado = function () {
var ado = this;
delete ado.Members;
return ado;
};
//order.js
function Order() {
this.Members = {
'id': {},
'name': {},
'ad_id': {},
'description': {},
'platform': {},
'platformName': {},
'adName': {},
'deliverType': {
'default': 'auto'
},
'startTime': {},
'duration': {},
'endTime': {},
'state': {},
'creator': {},
'createtime': {},
'streams': {},
'albums': {},
'videos': {},
'targetType': {},
'target_type':{},
'target_catelog':{},
'updater': {},
'updatetime': {},
'pushstate': {},
'offset': {},
'groupId': {},
'isCopy':{},
'copyFrom':{},
'editAfterCopy':{},
'orderType':0, //是否是打点订单,0表示普通订单,1表示可视化打点订单
'coordinate':{} //可视化打点的坐标,x距视频左端的百分比,y是距视频顶端的百分比,这里是序列化后的json字符串
};
this.init.apply(this, arguments);
}
function Order_Targeting() {
this.Members = {
'id': {},
'order_id': {},
'target_catelog':{},
'target_type': {},
'target_value': {},
'createtime': {},
'operator': {},
'parent_id': {}
};
this.init.apply(this, arguments);
}
Order.prototype = {
insert: function () {
return Order.insert(this);
},
update: function () {
return Order.update(this);
},
pushState: function () {
return Order.push2Redis(this);
}
};

  

Order.findAll = function (gid) {
var deferred = Q.defer();
var sql = SELECT_ALL, values = [];
if (gid) {
sql = SELECT_ALL_GID;
values = [gid];
}
pool.query(sql, values, function (err, reply) {
if (err) {
deferred.reject(err);
} else {
var arr = [];
if (reply) {
reply.forEach(function (n) {
arr.push(new Order(n).ado());
})
}
deferred.resolve(arr);
;
}
});
return deferred.promise;
};

  

2.

js中什么时候回考虑用call或者apply的更多相关文章

  1. 【第三周读书笔记】浅谈node.js中的异步回调和用js-xlsx操作Excel表格

    在初步学习了node.js之后,我发现他的时序问题我一直都很模糊不清,所以我专门学习了一下这一块. 首先我们来形象地理解一下进程和线程: 进程:CPU执行任务的模块.线程:模块中的最小单元. 例如:c ...

  2. JS中this的指向问题&使用call或apply模拟new

    this的指向由调用时决定而不是定义时决定,定义的方式: //直接定义在函数里 var a="window中的a"; var name="window"; fu ...

  3. JS 中的this指向问题和call、apply、bind的区别

    this的指向问题 一般情况下this对象指向调用函数的对象,全局环境中执行函数this对象指向window. function a(){ console.log(this); //输出函数a中的th ...

  4. js中几种实用的跨域方法原理详解(转)

    今天研究js跨域问题的时候发现一篇好博,非常详细地讲解了js几种跨域方法的原理,特分享一下. 原博地址:http://www.cnblogs.com/2050/p/3191744.html 下面正文开 ...

  5. js中几种实用的跨域方法原理详解

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  6. js中各种跨域问题实战小结(一)

    什么是跨域?为什么要实现跨域呢? 这是因为JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.也就是说只能访问同一个域中的资源.我觉得这就有必要了解下javascript中的同源策略 ...

  7. js中==, !==, === ,!=的区别

    在讨论比较符的时候我们先要来讨论哈js的类型,这样有助于我们从本质上了解原理. 下面是我找的资料加上个人的总结: js中有5种数据类型:Undefined.Null.Boolean.Number和St ...

  8. 聊一下JS中的作用域scope和闭包closure

    聊一下JS中的作用域scope和闭包closure scope和closure是javascript中两个非常关键的概念,前者JS用多了还比较好理解,closure就不一样了.我就被这个概念困扰了很久 ...

  9. js 中的算法题,那些经常看到的

    js中遇到的算法题不是很多,可以说基本遇不到.但面试的时候,尤其是一些大公司,总是会出这样那样的算法题,考察一个程序员的逻辑思维能力.如下: 1.回文. 回文是指把相同的词汇或句子,在下文中调换位置或 ...

随机推荐

  1. 烂泥:更换ESXI5.0管理网卡及管理IP地址

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 公司的服务器基本上都是在IDC机房里面的,为了更有效的利用服务器性能.所以有几台服务器,安装的是ESXI5.0做成虚拟化. 注意目前这些服务器都是双网卡 ...

  2. Python标准库01 正则表达式(re包)

    python正则表达式基础 简单介绍 正则表达式并不是python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大 ...

  3. Tomcat免安装配置

    大家都知道tomcat吧!因为Tomcat 技术先进.性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器,也是运行Servlet和JS ...

  4. zookeeper 相关学习资料

    zookeeper的配置:http://www.cnblogs.com/yuyijq/p/3438829.html zookeeper运维:http://blog.csdn.net/hengyunab ...

  5. 大话设计模式C++版——简单工厂模式

    简单工厂模式应该是所有设计模式中最简单,也最基础的一种模式,以下是一个简单的采用工厂模式写一个加减法的计算器. 1.抽象接口类——依赖倒转原则(高层和底层都要依赖于抽象,针对接口编程) class I ...

  6. css中单位em和rem

    一.介绍 1.em w3cschool中给出css中尺寸单位如下: 单位 描述 % 百分比 in 英寸 cm 厘米 mm 毫米 em 1em 等于当前的字体尺寸. 2em 等于当前字体尺寸的两倍. 例 ...

  7. ARM学习篇一 点亮LED

    要点亮LED,先决条件是什么,当然得有相应的硬件设施.板子的整个电路图比较大,我就直接取相关部分. 给发光二级管加上3.3v电压后,通过1k电阻,直接与S3C2440连接.至于为什么要加电阻,大家应该 ...

  8. .Net程序员之Python基础教程学习----字符串的使用 [Second Day]

         在The FirstDay 里面学习了列表的元组的使用,今天开始学习字符串的使用.字符串的使用主要要掌握,字符串的格式化(C语言中我们应该都知道,Python和C语言差别不大),字符串的基本 ...

  9. 翻译《Writing Idiomatic Python》(五):类、上下文管理器、生成器

    原书参考:http://www.jeffknupp.com/blog/2012/10/04/writing-idiomatic-python/ 上一篇:翻译<Writing Idiomatic ...

  10. 用FLASH,安智和IOS打电话方法

     打电话?你直接urlrequest不就打出去了吗普通网页http://xxx电话tel://xxx要啥ane