1. 声明一个box接口,所有html标签实现该接口
2. html的Class属性使用对象继承来组成特定的class
javascript设计模式中的掺元类_Mixin classes in javascript
掺元类本质上是把一个函数的原型中包含的属性拷贝给另外一个函数的原型,使其包含指定的属性,并且这种方式在java里面并不存在。笔记如下:
function augent(receivingClass,givingClass){
if(arguments[2]){
for(var i=2,len=arguments.length;i<len;i++){
receivingClass.prototype[arguments[i]]=givingClass.prototype[arguments[i]];
}
}else{
for(methodName in givingClass.prototype){
if(!receivingClass.prototype[methodName]){
receivingClass.prototype[methodName]=givingClass.prototype[methodName];
}
}
}
}
function augent(receivingClass,givingClass){
if(arguments[2]){
for(var i=2,len=arguments.length;i<len;i++){
receivingClass.prototype[arguments[i]]=givingClass.prototype[arguments[i]];
}
}else{
for(methodName in givingClass.prototype){
if(!receivingClass.prototype[methodName]){
receivingClass.prototype[methodName]=givingClass.prototype[methodName];
}
}
}
}
javascript原型继承实现_javascript Prototypal inheritance
javascript设计模式中原型继承有说明设置一个对象属性和读取一个对象属性存在差异的问题,本质上其实应该归结到原型编程的特性上,因为javascript使用原型链来实现对象继承特性,但是原型编程中有一个很重要的概念:原型槽,访问一个属性,先访问对象本身的名为这个属性名的属性,若属性不存在,则访问原型中同名的属性。而修改对象本身的一个属性却不会影响到原型对象,所以才会造成这种差异。
书中原型继承实现方式如下:
var CompoundObject = {
string1: ‘default value’,
childObject: {
bool: true,
num: 10
}
}
var compoundObjectClone = clone(CompoundObject);
// Bad! Changes the value of CompoundObject.childObject.num.
compoundObjectClone.childObject.num = 5;
// Better. Creates a new object, but compoundObject must know the structure
// of that object, and the defaults. This makes CompoundObject and
// compoundObjectClone tightly coupled.
compoundObjectClone.childObject = {
bool: true,
num: 5
};
// Best approach. Uses a method to create a new object, with the same structure and
// defaults as the original.
var CompoundObject = {};
CompoundObject.string1 = ‘default value’,
CompoundObject.createChildObject = function() {
return {
bool: true,
num: 10
}
};
//这里讲到对于对象中的子对象,最好使用工厂方式来创建,而不是直接写在父对象里面
CompoundObject.childObject = CompoundObject.createChildObject();
var compoundObjectClone = clone(CompoundObject);
compoundObjectClone.childObject = CompoundObject.createChildObject();
compoundObjectClone.childObject.num = 5;
//克隆方法使用一个空函数,最后获得一个原型为父对象的空函数对象.最后一句表示通过构造器获取对象
function clone(object) {
function F() {}
F.prototype = object;
return new F;
}
用闭包实现私有成员_Private methods with closures
javascript设计模式中讲到的一种私有成员实现方式,前面有讲到过使用下划线约定的方式实现私有成员变量,而闭包保证在函数中定义的变量只能被当前函数作用域里面的函数所访问,从而保证了变量的私有性。
var Book = function(newIsbn, newTitle, newAuthor) { // implements Publication
// Private attributes.
var isbn, title, author;
// Private method.
function checkIsbn(isbn) {
…
}
// Privileged methods.
this.getIsbn = function() {
return isbn;
};
this.setIsbn = function(newIsbn) {
if(!checkIsbn(newIsbn)) throw new Error(‘Book: Invalid ISBN.’);
isbn = newIsbn;
};
this.getTitle = function() {
return title;
};
this.setTitle = function(newTitle) {
title = newTitle || ‘No title specified’;
};
this.getAuthor = function() {
return author;
};
this.setAuthor = function(newAuthor) {
author = newAuthor || ‘No author specified’;
};
// Constructor code.
this.setIsbn(newIsbn);
this.setTitle(newTitle);
this.setAuthor(newAuthor);
};
// Public, non-privileged methods.
Book.prototype = {
display: function() {
…
}
};
免费虚拟主机资源_Free Web Hosting
以下介绍的,是免费的虚拟主机。既然免费,功能不免难以和付费的虚拟主机相比,简单的甚至只支援静态网页空间(不支援PHP等网页程式)。当然如果您只需要一个小小网站空间存放一般的Html网页档案和体积小的图片、照片甚至于临时放个DM,单纯的免费空间就差不多了。但如果您还是需要写点网页程式,或者用WordPress、b2evolution等套件架设部落格,那么支援PHP和MySQL就有其必要性了。
为何这些网页空间可以免费呢?其实这算是一种宣传手法,让使用者可以试用该公司的虚拟主机服务,如果使用者真的有必要认真的经营架设网站,或者有必要申请自己的网域名称,那么就要付费升级原有的空间,这些业者就是希望客户能够在满意之后成为正式用户。另一方面,透过免费网页的号召,也可增加该公司的流量, 对于曝光率、搜寻引擎最佳化(SEO)和Alexa网站排名来说有其一定的好处。
网路上可以搜寻到大量的免费网页空间、免费虚拟主机的相关讯息,但大部分的限制较多、空间很少,加上强迫放置该公司的广告,实用性大打折扣。这里所介绍的则是空间较大而且不会放置广告的虚拟主机商,对于想测试、暂时分享档案、试着尝试自行架设网站却不想花钱的使用者来说,是很好的服务。
但需注意的是,免费虚拟主机提供的免费空间仍然有其使用上的限制。例如申请之后14天内必须启用,网站启用后每两周内至少得登入一次等。部分免费虚拟主机则建议申请者使用英文、西班牙文或者法文作为主要语言。但一般来说只要您登记之后真的有在使用、更新,且真的有人浏览(即使只有你自己),这些限制就不是问题。各网站的限制在您至该网站登记时会有详细条款说明,或者也会发信到您登记的Email信箱提醒。
当然若是您使用量较大、需要申请网域名称、需要更多的客户服务的话,还是建议您使用付费的服务。
javascript代码灵活性_The flexibility of JavaScript
在javascript设计模式里面讲到代码的灵活性,下面两种编码风格我很喜欢,第一种使用原型并赋予其原型一个函数作为参数.这里面使用this.prototype[name]相当于给原型一个数组引用:
/ Add a method to the Function class that can be used to declare methods. /
Function.prototype.method = function(name, fn) {
this.prototype[name] = fn;
};
/ Anim class, with methods created using a convenience method. /
var Anim = function() {
…
};
Anim.method(‘start’, function() {
…
});
Anim.method(‘stop’, function() {
…
});
而第二种则在第一种基础上返回this,并让添加函数方法可以做链式调用:
/ This version allows the calls to be chained. /
Function.prototype.method = function(name, fn) {
this.prototype[name] = fn;
return this;
};
/ Anim class, with methods created using a convenience method and chaining. /
var Anim = function() {
…
};
Anim.
method(‘start’, function() {
…
}).
method(‘stop’, function() {
…
});
2012年的一点总结
今天是1月5号,昨天还在迎接2012今天就2013了,感慨时间过得真是飞快,总结一下这一年的一些事和一些收获。
在北京IBM项目组里面和同事黄印在一起参加应用开发比赛的时候挺受启发的,主要是webandroid的功能不够简单,直观。她提到了一个很重要的观点就是把两条记录拖到一起,然后再合并起来,这样用户感觉更直观。然后她也提到让用户自己把别人发的状态和别人连起来,这样有八卦的感觉,让用户感觉有趣,好玩。
在北京的时候还去了蛮多风景区,个人很喜欢北京的风景,在景点逛的时候也认识了蛮多的朋友,这也让人挺高兴的,不过北京的雾有时候特别的大,让人难受的不得了,就这一点不好了。。。
12年3月在果壳网逛万有引力的时候看到了一个妹纸的挂牌贴,看照片挺可爱,就在网络上认识了下,各个方面问的比较全面,算是网上相亲。然后在某下雪天问了下妹纸交往的意愿,妹纸同意了。4月份的时候去南京和未来的女朋友晶晶见了面,还在南京的玄武湖、中山陵、夫子庙等景点逛了看看,绿化挺好,个人感觉和武汉挺像,然后去了南京理工看二月兰,也很漂亮,个人也很喜欢。
在南京看晶晶后,就确定了关系,之后五一长假的时候晶晶来北京这边玩,我和晶晶也逛了北京的故宫,798等一些景区,拍了好多照片,特别有意思。之后的话,在5月底我去了趟苏州和晶晶聚了聚,苏州也有很多不错的风景,和晶晶也拍了很多照片。
因为北京气候不适应,另外晶晶也在苏州离北京远,见面也不方便,所以在6月中的时候我离开北京回到上海,然后在上海2个月没有找到合适的工作,其中去了家互联网公司,但是因为人事说的和实际工作情况不太一样等缘故,个人还是离开了,然后面了蛮多公司,但是没有找到合适的岗位。
8月份的时候去了上海银行项目,一直到12月份,短期项目非常累,有一段时间,每天加班到8,9点,回家都是到10点11点,最晚的时候回家都是12点了,连晚饭都没吃。人少,事情多,有时候做的还很杂,11月份,好几个周六日都在加班。人熬的特别累,加上办公室烟味重,鼻子老是过敏,个人上班状态特别不好。同事有时候沟通不清楚,说话也特别难听,这些事情堆到一起,搞的人状态心情,一直特别不好。期间和晶晶也有过特别大的争执,现在想想心里还特别不是滋味,毕竟也有工作不顺心的因素在里面,让自己的女朋友也受影响了。
12月的时候,离开了上海,来到南京,在这边刚成立的公司上班,南京的生活节奏相对慢些,心里少了些烦躁,工作时也有些时间看看资料啥的。
12年总的来说,波折挺多的,生活不可能总是一帆风顺,重要的还是要用一个平常心去面对,爱自己所爱,做自己想去做的,懂得珍惜眼前,把握好自己的方向,做好自己。
EasyUI 组件两次加载的问题及解决方法
easyui 在用标签写组件的时候再用代码生成组件的时候,如果设置了url,会进行两次加载:
标签生成:
<div id=”tt” class=”easyui-tabs” style=”width:500px;height:250px;”>
<div title=”Tab1” data-options=”href:’xxx’”>
tab1
</div>
<div title=”Tab2” data-options=”closable:true,href:’xxx’”>
tab2
</div>
<div title=”Tab3” data-options=”iconCls:’icon-reload’,closable:true,href:’xxx’”>
tab3
</div>
</div>
js代码生成:
$(‘#tt’).tabs({
border:false,
onSelect:function(title){
alert(title+’ is selected’);
}
});
以上两段代码放到一起,就会导致两次加载,这时候的解决方法是把标签生成方式的class easyui-tabs去掉~~