無標題文檔

淘宝和「有啊」之争

https://friable.rocks/_/2009_11_05/76098674b3e1.jpg https://friable.rocks/_/2009_11_05/62439674b295.jpg

本来不该引发这样「敏感」的话题,但同时也作为经常上网购物的普通消费用户,在这里算是废话几句。

事情得首先从尝试「有啊」开始。在「有啊」上找到了件合适的商品,由于自己没有安装百度 Hi 客户端,所以使用旺旺联系上卖家说明情况,然后表示能否使用百付宝付款(自己也够孙子的)。

然而那时那卖家显得很紧张,慌忙把我拉到 QQ 里面聊。具体的情况看下面的聊天记录

××专卖店
    淘宝上的,认识您很荣幸!
手气不错
    怎么不能用有啊呀~ 
××专卖店
    不要在淘宝上把顾客引到百度有啊,这样淘宝会把咱们的店铺封掉的啦。
××专卖店
    我一直叫你加我QQ
手气不错
    不会吧,现在淘宝还这样做呀? 
××专卖店
    这很正常的啊,百度开了和淘宝一样的购物平台,你不知道这利害关系啊?
手气不错 
    我有啊里的确充点钱,现在拿不出来,所以只能消费了。 
××专卖店
    所以在淘宝的时候就要遵守淘宝的规则,不能故意把顾客往外网上拉的,
手气不错 
    不明白,对于我们用户而言都不是一样的嘛~~
××专卖店
    在有啊的地盘就要遵守有啊的规则也不能把顾客引到其它平台上交易的,
手气不错
    这个也算是不正当竞争吧~ 
××专卖店
    就好比咱们在大商场卖东西一样的啦,要小心哦。
手气不错 
    还不知道有这样的玄机,晕的 
××专卖店
    要小心,在每个平台上我们做为卖家都要小心的。
手气不错 
    那您说淘宝官方搞不好还监控旺旺的聊天记录喽?
××专卖店
    肯定的啦
手气不错 
    嗯,理解的 
××专卖店
    咱们聊QQ,腾讯也知道咱们聊的是什么内容
××专卖店 
    每个行业都有竟争的,
手气不错 
    哎,晕的,那我从有啊上给您拍下,然后您修改下价格吧,顺便我也熟悉下有
    啊的购物流程 
××专卖店
    好的,要记住,做为卖家,咱们在有啊的时候就要遵守有啊,在淘宝的时候就
    要遵守淘宝的,这样咱们才不吃亏的啦。
××专卖店
    特别不要在旺旺和有啊上讲关于信誉的事哦,呵呵。
手气不错
    嗯,受教啦,以后这点得注意了,在别人的地盘,哎…… 
××专卖店 
    就是啦,呵呵。
手气不错 
    放心吧,这事情会注意的,今天我也算是见识到了 
××专卖店 
    呵呵,互相学习了哦 
××专卖店
    http://wenda.tianya.cn/wenda/thread?tid=793e6b54f97210e3
××专卖店 
    您用GOOGLE(谷歌)搜索一下,关于百度和淘宝的竟争,有好多新闻和贴子的,
    那些都是非是啦,咱们生意不参与的。即使要参与也要穿着马甲不让别人认
    出来的,呵。

最后,说下自己的几点个人看法

  1. 两平台间的竞争,最后波及的只能是徘徊于两者之间的中小卖家。
  2. 在还未成型的电子商务领域过早的形成寡头垄断,未必是件好事 - 有竞争才会有进步。
  3. 双方企业选择以什么样的姿态面对自己竞争对手,这直接影响着我对其的印象和态度。
  4. 如能看到双方企业都能以开放和自信的心态去对待自己的竞争对手,我想那是相当喜闻乐见的。

第三届上海 D2 随感

D2前端技术论坛(Designer & Developer Frontend Technology Forum),简称 D2。 上一届的 D2 在北京由中国雅虎承办 。这一届的 D2 在上海由 土豆网主办。总体看来,这次的 D2 给我的其他收获大于技术上的收获。

由于是土豆主办,所以此次的内容以 Flash 相关的技术偏多。上午的两场 Flash 技术议题,由于技术上的关注点不同,所以感觉没有多大的营养。但 7yue 的苹果以及他的 PPT 给我的印象还是很深刻的。

对比下午微软 超群 的有关 Explorer8 演讲,个人感觉更像是产品介绍会。超群幽默的演讲,给原严谨的会场气氛加入了点幽默的气息。耐人寻味的是,微软还再次着重介绍了 Silverlight2 的新特性,个人感觉有点针对上午的 Flash 的意思。

不过不管怎么讲,Sliverlight 与 Flash 的相互鞭策使 RIA 市场竞争激烈,这让我们有了更多的选择、这是好事。

剩下的几场有关阿里的前端开发流程以及 UED 部门组织架构的介绍。他们都表达了同样的心声,就是希望前端在开发流程乃至整个公司组织架构中,需要更多的发言权。

其中的内容还是引起了很多人的关注,在 许湛 介绍 阿里巴巴 的开发流程时,甚至作为会场的主持人也详细询问起其中的细节。

https://friable.rocks/_/2009_11_05/49056696c791.jpg

在会议间还有几个小插曲,比如坐在我旁边的一个 MM (看起来像是个秘书)看见我使用 Firebug 调试页面时,和旁边的中年男子(某公司的管理层?)说「这就是 Firebug」,让我寻味。

https://friable.rocks/_/2009_11_05/31826696c795.jpg

最后,在上海发现两件很有意思的小事情。第一就是地铁的广告牌系统竟然是 Linux 系统,很明显由于网络的原因暴露了其系统信息。

https://friable.rocks/_/2009_11_05/16648696c782.jpg

还有就是我们下榻的酒店前台电脑竟然安装了 Netscape 7.2 ,这个「上古」的浏览器让我们这帮前端好好测试了把当前各主流站点。不过在个浏览器下页面的表现情况,我们也只能祈祷「上帝保佑」了。

奇异的 arguments(翻译)

function format(string) {
  var args = arguments;
  var pattern = new RegExp("%([1-" + arguments.length + "])", "g");
  return String(string).replace(pattern, function(match, index) {
    return args[index];
  });
};

这个函数实现了模板替换,你可以在要动态替换的地方使用 %1 到 %9 标记,然后其余的参数就会依次替换这些地方。例如:

format("And the %1 want to know whose %2 you %3", "papers", "shirt", "wear");

上面的脚本就会返回

"And the papers want to know whose shirt you wear" 。

在这里需要注意的是,即便在 format 函数定义中,我们仅定义了个名为 string 的参数。而 Javascript 不管函数自身定义的参数数量,它都允许我们向一个函数传递任意数量的参数,并将这些参数值保存到被调用函数的 arguments 对象中。

转换成实际数组

虽然 arguments 对象并不是真正意义上的 Javascript 数组,但是我们可以使用数组的 slice 方法将其转换成数组,类似下面的代码

var args = Array.prototype.slice.call(arguments);

这样,数组变量 args 包含了所有 arguments 对象包含的值。

创建预置参数的函数

使用 arguments 对象能够简短我们编写的 Javascript 代码量。下面有个名为 makeFunc 的函数,它根据你提供的函数名称以及其他任意数目的参数,然后返回个匿名函数。此匿名函数被调用时,合并的原先被调用的参数,并交给指定的函数运行然后返回其返回值。

function makeFunc() {
  var args = Array.prototype.slice.call(arguments);
  var func = args.shift();
  return function() {
    return func.apply(null, args.concat(Array.prototype.slice.call(arguments)));
  };
}

makeFunc 的第一个参数指定需要调用的函数名称(是的,在这个简单的例子中没有错误检查),获取以后从 args 中删除。makeFunc 返回一个匿名函数,它使用函数对象的(Function Object)apply 方法调用指定的函数。

apply 方法的第一个参数指定了作用域,基本上的作用域是被调用的函数。不过这样在这个例子中看起来会有点复杂,所以我们将其设定成 null ;其第二个参数是个数组,它指定了其调用函数的参数。makeFunc 转换其自身的 arguments 并连接匿名函数的 arguments,然后传递到被调用的函数。

有种情况就是总是要有个输出的模板是相同的,为了节省每次是使用上面提到的 format 函数并指定重复的参数,我们可以使用 makeFunc 这个工具。它将返回一个匿名函数,并自动生成已经指定模板后的内容:

var majorTom = makeFunc(format, "This is Major Tom to ground control. I'm %1.");

你可以像这样重复指定 majorTom 函数:

majorTom("stepping through the door");
majorTom("floating in a most peculiar way");

那么当每次调用 majorTom 函数时,它都会使用第一个指定的参数填写已经指定的模板。例如上述的代码返回:

"This is Major Tom to ground control. I'm stepping through the door."
"This is Major Tom to ground control. I'm floating in a most peculiar way."

自引用的函数

您可能会认为这很酷,先别急着高兴,后面还有个更大的惊喜。它(arguments)还有个其他非常有用的属性:callee 。arguments.callee 包含了当前调用函数的被引用对象。那么我们如何使用这玩意做些的事情?arguments.callee 是个非常有用的调用自身的匿名函数。

下面有个名为 repeat 的函数,它的参数需要个函数引用和两个数字。第一个数字表示运行的次数,而第二个函数定义运行的间隔时间(毫秒为单位)。下面是相关的代码:

function repeat(fn, times, delay) {
  return function() {
    if(times-- > 0) {
      fn.apply(null, arguments);
      var args = Array.prototype.slice.call(arguments);
      var self = arguments.callee;
      setTimeout(function(){self.apply(null,args)}, delay);
    }
  };
}

repeat 函数使用 arguments.callee 获得当前引用,保存到 self 变量后,返回个匿名函数重新运行原本被调用的函数。最后使用 setTimeout 以及配合个匿名函数实现延迟执行。

作为个简单的说明,比如会在通常的脚本中,编写下面的提供个字符串并弹出个警告框的简单函数:

function comms(s) {
  alert(s);
}

好了,后来我改变了我的想法。我想编写个「特殊版本」的函数,它会重复三次运行每次间隔两秒。那么使用我的 repeat 函数,就可以像这样做到:

var somethingWrong = repeat(comms, 3, 2000);
somethingWrong("Can you hear me, major tom?");

结果就犹如预期的那样,弹出了三次警告框每次延时两秒。

最后,arguments 即便不会经常被用到,甚至显得有些诡异,但是它上述的那些惊艳的功能(不仅仅是这些!)值得你去了解它。

我的照片

嗨!我叫「明城」,八零后、码农、宁波佬,现居杭州。除了这里,同时也欢迎您关注我的 GitHubTwitterInstagram 等。

这个 Blog 原先的名字叫 Gracecode.com 、现在叫 「無標題文檔」 。 要知道作为码农取名是件很难的事情,所以不想在取名这事情上太费心思。

作为八零后,自认为还仅存点点可能不怎么被理解的幽默感,以及对平淡生活的追求和向往。 为了避免不必要的麻烦,声明本站所输出的内容以及观点仅代表个人,不代表自己所服务公司或组织的任何立场。

如果您想联系我,可以发我邮件 `echo bWluZ2NoZW5nQG91dGxvb2suY29tCg== | base64 -d`

分类

搜索

文章