JS类的技巧 在初始化对象前添加属性

写Prever Start的时候,曾遇到过这样的问题,就是通过new关键字实例化一个对象,却希望它的原型在运行之前能具备一些外来的属性,可惜的是像这样:

var obj=new myClass();

只有一个语句,怎么添加这些属性呢?

这个我们需要从JS中类实例化的实现原理上来讲了(声明,我也只是听说,但的确管用)。听群里的高手说,上面的那个语句就等价于

var obj={};
myClass.call(obj);

我就不解释意思了,很明显的,两个代码之间的间隔给我们的操作提供了可能。

var obj={};
//在这里添加,如:
obj.ID=123;
myClass.call(obj);

不过我想一般可能用不到这样的写法,但既然曾经用到过就有它的价值,在此分享下。

JS中对象的表示方法

Javascript作为一个脚本语言,因为它的灵活性,可以用很多写法来达到同样的目的,现在我想说下接触Javascript以来所了解的对象的表示方法。

方法一

var obj=new Object();

Object貌似是JS中所有对象的原型,像上面这样的方法也最直接。众所周知的,它还有另外一个等价的写法。

方法二

var obj={};

不过它有更强的扩展性,这也是JSON的基础:

var obj=
{
Name:”Object”,
Age:0,
SayHello:function(){alert(“Hello!”);}
};

貌似很多类库的书写和对象的初始化都是使用的这种方式,但有时候,我更喜欢另一种建立在类的基础上的方法(不知道是否是原创的)。

方法三

var obj=new function()
{
this.Name=”Object”;
this.Age=0;
this.SayHello=function(){alert(“Hello!”);};
}();

从上面的例子很难看到这个方法的优点,但假如说我们这个对象里需要私有变量,或者需要有被内部多次使用的函数时,它就十分有用了。

当然,好用与否不是绝对的,根据需要选择才是王道。

发现Xplore用中心那个确认键可以换行

为什么,为什么,用了那么久,我到现在才发现…
截止目前,用手机(传统键盘)一共写了大概三个JS小程序,其中一个是用LightNote写的小画板,觉得写得不错,调色板比较强,因为写了个渐变色的小功能。一个是贪食蛇,可以穿墙哦!这个还是同学提的意见。开发过程中还特意保存了一版,因为没有写游戏结束的条件,所以永远不死,我叫它不死版。还有一个是这两天写的一个飘雪效果,前面有文章,就不说了。后面两个都是用Xplore写的,但是直到今天,我才在无意中发现,原来可以这样…同志们可以想象,我是如何输入那一个又一个换行符的(其他符号我就不提了)…

用上了Opera Mini 5 Beta 2

前两天心血来潮又去mini.opera.com逛了圈,无意中发现Beta 2已经发布,带着期待下载并安装,现在说下体验。

在界面上,这次更新更换了里面的几个图标,增加了一个Download(我下的英文版),不过还是会用自带的浏览器打开jad文件,多不爽的。另外修复了搜索中文乱码的问题,不过…不过…加载页面时流量信息没了,这个让人很不习惯。开始以为是英文版的原因,没想到换了中文版也是如此。

操作方面,貌似对JS效果进一步进行了优化,感觉不错,按下#号或*号后,会像4.2那样弹出提示了,不用老是到帮助里找。

还有一个让人有些那啥的是,上一个版本中,radio和check(就是表单里圆的和方的那种可以勾选的东西)就那么丑,这次还是那么丑。另外,长按退格键仍然不能连续清除文本,还得按一下退一格,悲痛。

还是希望Opera Mini能越来越好,不过原来一直看不起UCWEB,现在有点改变对它的看法了,都加油!

第一次写雪花特效

第一次写雪花特效,没想到还是在手机上写的…之前把雪花数量设置成了50,那个卡啊…不过调整后在手机上看效果也将就。雪花比较简陋,是2×2的白色小方框,不过以后可以在CSS里改动。

附Demo(建议用S60自带浏览器看):
http://www.vilic.info/demo/s60/snow
参数是可以改动的,现在觉得这也是写程序的好习惯,保持!

Google收录15页

看来已经通过了Google的初期审查,收录页面数量一下子从2上升到了15(我人工数的),小小的高兴下。以后要加油写,然后Google你就加油收录!

不过…为什么百度你就是不甩我呐?都好多天了,一个页面都没有…回想原来的V-NS,貌似却是百度先甩我…或者是Google?算了,记不清了…

工信部又打算手机实名了

“扫黄”终于扫到个人了,这下我也终于算看清问题的始末了。

试问有多少人通过有限且昂贵的WAP方式浏览成人网站?为何CN又如此直接的将矛头指向WAP?知直到看到这一则新闻,我才恍然大悟,如此一箭双雕的计划从头到尾是那么完美。

首先,CN又一次“规范”了国内网站,基本实现了国内能够访问的网站实名化;现在,又“顺其自然”地准备手机实名。如此合情合理,似乎快要毫无破绽地完成对所有人的言论控制。如此,“言论自由”之后的那一句,变得如此沉重——“文责自负”。

让我们静下心来想想,真的会就“扫黄”而改变手机实名或非实名吗?显然不会!真的会就“扫黄”而建立庞大的互联网实名体制吗?显然不会!

所谓的“扫黄”,只是一个蒙骗世人的借口!

愿明天能美好。

JS中函数的传递(二)匿名函数

在JS函数传递的过程中,还有一种很重要的类型,便是匿名函数。当然,匿名函数的用途远不只函数传递,但本文仅对它在函数传递中的作用做一个简单的说明。

以下两个代码在效果上是基本等价的:

/*作者:Vilic Vane 博客:www.vilic.info*/
function abc(func)
{
func();
}

//代码1
function test()
{
alert(“Hello!”);
}
abc(test);

//代码2
abc(function(){alert(“Hello!”);});

可以看出,有时候通过书写匿名函数,可以节省代码量,但在有些时候,则会降低程序的可读性。关于匿名函数还有一个常用的技巧,即通过匿名函数(当然如果你愿意,或者函数较为复杂时,可以像上面的代码1那样单独书写一个函数)传递参数。那么,什么时候会用到呢?拿setTimeout来说,setTimeout有两个主要参数,一个是表达式或函数,一个是时间。通常,我们更多使用的是函数而不是表达式。但因为传递的函数是一个变量,所以,我们无法为它简单的加上参数,这个时候,JS闭包的优势就体现出来了。

setTimeout(function(){abc(/*参数在这里*/);}, 500);

顺便说到闭包,就提一下,看到很多地方说避免用闭包,其实我觉得闭包很有用,可以大大节省参数的传递成本。但前提是,必须有声明变量的好习惯。记得有一次发现自己Prever Start的图标排列的间隔总是和最后一个实例一样(当然一开始没发现得那么具体),才意识到是自己忘记了声明一个变量,自然,它也便成了全局变量了。