javascript的面向对象15分钟教程

第一种面向对象的写法

创建空对象

1
2
var bill ={};//创建一个空对象

给对象添加属性和方法

1
2
3
4
5
bill.name = "Bill Goat";
bill.work = function (){
console.log("programming....");
};

一步完成上面的两件事

1
2
3
4
5
6
7
var bill ={
name : "Bill Goat";
work : function(){
console.log("programming....");
}
};

访问对象和属性

1
2
3
console.log(bill.name);
bill.work();

方法重写

1
2
3
4
5
bill.name = "Bill Goat";
bill.work =function(who){
console.log("programming for "+who);
};

通过this关键字访问内部属性

1
2
3
4
bill.say = function (){
console.log("bill's name is"+this.name);
};

对象引用

1
2
3
4
5
6
var silly = bill;
console.log(silly.name);
sally.name = "Silly";
console.log(silly.name);
console.log(bill.name);

另一个方式引用

1
2
3
4
5
6
7
bill.name = "Bill Goat";
bill.say();
var sayName = bill.say();
sayName;
sayName();

有意思的地方 :全局属性

1
2
3
var name = "Global";
bill.say();

发现此时输出的是
bill's name is Global

另一种面向对象的写法

定义对象及属性

1
2
function Game(){};

创建对象

1
var DF = new Game();

对象属性

1
DF.title = "星际争霸2";

构造方法

1
2
3
4
5
6
7
8
function Game (title){
this.title = typeof title !== 'undifined' ? title :"";
};
var d3 = new Game("d3");
d3.title;
d3.title ="starcraft2";

this.title = typeof title !== 'undifined' ? title :"";相当于

1
2
3
4
5
6
if(typeof title !== "undifined"){
this.title = title;
}else{
this.title = "";
}

创建一个方法来访问这个属性

1
2
3
4
d3.loveTitle = function (){
console.log("I love "+this.title);
}

更好的写法

1
2
3
4
5
Game.prototype.heartIt = function (){
console.log("I love "+this.title);
}
d3.heartIt();

下次详解javascript的原生对象模型

to be continued~~~~

#关于软件工程的讨论–质量篇

那为什么软件系统的质量不容易高呢?我觉得主要原因是流程不完善。那为什么不完善?需求容易变。为什么容易变?是因为不论程序员自己,还是需求方,其实潜意识都认为自己做的东西是变更成本较低的。

试想一下,为什么没人在盖高楼盖一半变更需求?为什么没人修大桥修一半变更需求?甚至做衣服做一半的时候变更需求,理发到一半变更需求,都会被人认为是不讲理。但是在软件领域,好像这倒成了普遍现象。

因为整个软件系统的实现,都是虚拟的,看不见摸不着,并不消耗什么物料,所以从这个角度想,变起来当然是容易的。但软件系统的架构,其实也跟实体的没本质区别,变更时候要考虑很多关联因素,并不是就那么孤立的看一小块地方,当然,也会有一些不影响全局的变更。打个比方说,如果你在盖房子盖到一半,那变更外墙颜色肯定是要比变更窗户大小容易的。要是想变得太多,估计只好拆了重来。

下面的讨论更加精彩:

A:其实不是流程问题,老板和甲方问题

A:甲方尤其关键

A:尼玛,要8层楼房,付2层费用

……

#javascript异步编程读书笔记之事件机制

##事件的调度

  • 异步执行

setTimeout函数的解释:给定一个回调及n毫秒的延迟,setTimeout会在n毫秒后运行该回调。

代码清单1:

1
2
3
4
5
for (var i = 1; i <= 3; i++) {
setTimeout(function(){
console.log(i); },
0);
};

输出结果:

1
2
3
4
4
4
  • 线程阻塞
    代码清单2:

    1
    2
    3
    4
    5
    6
    var start = new Date;
    setTimeout(function(){
    var end = new Date;
    console.log('Time elapsed:', end - start, 'ms');
    }, 500);
    while (new Date - start < 1000) {};
  • 队列

javascript使用队列的方式来循环处理请求,这种机制被称为事件循环

#如何使用短网址和二维码简化网站访问

  1. 短网址(shorturl)
    web2.0时代的潮流,借助短网址您可以用简短的网址替代原来冗长的网址,让使用者可以更容易的分享链接。
    这里我使用的是百度的短网址服务:http://dwz.cn/
    1. 访问http://dwz.cn/主页
    2. 输入你的博客地址
      我输入http://jeffsui.github.io/pinghailinfeng_blog/
    3. 复制短网址
  2. 二维码(two-dimensional-barcodes)
    微信时代,不知道二维码的基本都属于外星球人了。
    这里我选择的是草料二维码:
    http://cli.im/
    1. 输入二维码地址
    2. 进行一些基本设置
      包括前景色、背景色、渐变色等等。
    3. 嵌入图片
    4. 选用你喜欢的模板
    5. 保存二维码
  3. 在线存储
    这里我选择国内知名的七牛云存储。

    4.在博客中引用图片地址就可以了

#我的新文章

这是我的第一篇在github上的博客。记录下我的工作和生活,慢慢给其他的文章都更新到这里。嬉笑怒骂也好,喜怒哀乐也罢,我就是一个俗人罢了。