歌词:
Hey Jude

Hey Jude, don't make it bad.
Take a sad song and make it better.
Remember to let her into your heart,
Then you can start to make it better

Hey Jude, don't be afraid.
You were made to go out and get her.
The minute you let her under your skin,
Then you begin to make it better.

And anytime you feel the pain, hey Jude, refrain,
Don't carry the world upon your shoulders.
For well you know that it's a fool who plays it cool
By making his world a little colder

nananananananananana~

Hey Jude, don't let me down.
You have found her, now go and get her.
Remember to let her into your heart,
Then you begin to make it better.

So let it out and let it in, hey Jude, begin,
You're waiting for someone to perform with.
And don't you know that it's just you, hey Jude, you'll do,
The movement you need is on your shoulder

Hey Jude, don't make it bad.
Take a sad song and make it better.
Remember to let her under your skin,
Then you'll begin to make it
Better better better better better better oh~

nananananananananananana, hey Jude...

Tamas Wells,是一支来自澳洲墨尔本的 indie-pop 乐团,曲风清新、平缓而又优美。,轻快、含着些忧伤的吟唱,将人们带入那片人们自己心中含藏已久的田野,很容易让人想起从前那无忧无虑的时光。将《Valder Fields》送给大家,下午好。

http://storage.live.com/items/AE6F1995B896B65F!812?Valder Fields.mp3

目前为止,我们的例子中提到过很多次 this 以及函数了。例如 Function.prototype.apply 和 Function.prototype.call 他们都有各自的优势,但是,在讨论这门语言的其他方面之前,先来看看 this 关键字和执行上下文。

方法和函数

方法在ECMAScript规范中被定义如下:

......函数是属性的值。

注:当一个函数被当做对象的方法调用的时候,此时,函数的值就会被当做对象的值。

当被当做对象的方法调用的时候,也可以将函数当做单独的子程序,这在社区中,也是被普遍使用的。

执行上下文(Execution Context)

ECMAScript 5.1 规定,执行中的程序形成执行上下文。此执行上下文支持此语言的某些结构,而这些结构就是需要管理的范围--来自于其他部分的可见变量和函数声明。

此执行上下文包含一个引用到各种可用状态元素的处于当前逻辑范围内的被管理的程序。更多详细信息,请访问 执行上下文

全局上下文和构造函数 (this)

运行下面的代码:

function add(x, y) {
  console.log(this);
  return x + y;
}

add(1, 1);

第二行代码将会是一个全局变脸被现实:window ,但是,如果在第一行之后增加 use strict 的话,将会返回 undefined .

现在思考一下,当构造函数被执行的时候,发生了神马?

当作为 new Shape() 的结果,进入 Shape 构造函数的时候,this 的值就会使当前对象,也就是此处的 shape 。请记住下面的话,如果想写面向对象的程序的话:如果一个函数被作为一个对象的方法调用,或者使用 new 关键字,此时, this 的值就是对象的当前实例,否则就是全局上下文 window 或者 undefined 。但是此处要讨论的是,this 的值,取决于如何调用函数。

一般可能犯得错误

小心的对待嵌套在方法中的函数,例如下面的例子:

function Shape() {
  this.x = 0;
  this.y = 0;
}

Shape.prototype = {
  move: function(x, y) {
    this.x += x;
    this.y += y;

    function checkBounds() {
      if (this.x > 100) {
        console.error('Warning: Shape out of bounds');
      }
    }

    checkBounds();
  }
};

var shape = new Shape();
shape.move(101, 1);

checkBounds 函数被定义在 move 方法内部,但是 console.error 此行代码,却永远不会被运行到,这是因为 checkBounds 函数中的 this 的值是全局上下文 window 而不是此处的 shape。因为虽然函数在 move 方法内部,但执行函数的时候,函数是单独的子程序,所以 this 还是指向 window。而 window.x 没有定义,所以永远执行不到。但是此时就可能混淆,所以带来错误。

但是,我们可以将 this 赋值给其他变量,从而可以正常使用。请注意有 self 的两行代码。如何修改的。

function Shape() {
  this.x = 0;
  this.y = 0;
}

Shape.prototype = {
  move: function(x, y) {

    var self = this;

    this.x += x;
    this.y += y;

    function checkBounds() {
      if (self.x > 100) {
        console.error('Warning: Shape out of bounds');
      }
    }

    checkBounds();
  }
};

var shape = new Shape();
shape.move(101, 1);

现在,当执行 move 方法的时候,self 代替了 this,从而可以正常的执行了。

总结

使用 this 的时候,请记住以下三点:

1. 取决于函数被以何种方式调用,new MyConstructor 和 myObject.method() 将被指向其实例,而当 this 在函数中的话,将会指向 window 。
2. 严格模式下,this 将会是 undefined 而不是 window 。
3. this 可以赋值给任意合法变量,但是一般 self 用的比较多。

看到小夜MM,在论坛放了那么好的图片站源码还有数据包,嘿嘿嘿,刚好之前有做图片站的打算,所以准备了一个域名,那就偷偷的自己也弄一个,就传到 Godaddy.com 的免费空间中,反正现在也没广告了,10G 空间 300G 流量,够够用的了。程序只有 8M 多,挺好弄的,很快 FTP 就传好了,但是数据咋办呢,1.4G 的数据,VPS wget 直接拖下来也就几十分钟,但是上传咋办呢?不好弄啊,FTP 也不行,先下载到本地,再 FTP 那几十 KB 的速度上传,不累死才怪。况且有 VPS 呢,国外对国外不是更快么。

那么说干就干。也就是今天的用 SSH 登录远程服务器 A,然后在服务器 A 上的终端,通过命令行来使用 FTP 命令,将上传文件到 B 服务器。

具体步骤如下:

1. ,首先用 cd 命令,进入要上传的文件所在的目录,然后在终端中输入

ftp

即可变为 FTP 操作环境
终端显示为,此为 ftp 操作环境标志。

ftp>

2. 然后输入要登录的远端服务器地址,ip 和域名都行

ftp> open yimity.com

3. 然后终端就会有如下显示(IP 时间等,还有其他的有可能不同,差不多即可)

Connected to yimity.com (173.248.187.5).
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 5 of 50 allowed.
220-Local time is now 08:52. Server port: 21.
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 3 minutes of inactivity.
Name (yimity.com:root):  然后这里输入 FTP 用户名

4. 接下来就是输入密码

331 User yimity OK. Password required
Password:  这里输入密码,输入过程中不会有任何显示,但其实已经输入了。

5. 然后如果密码正确,就会有如下提示

230-User yimity has group access to: yimity
230 OK. Current restricted directory is /
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

6. 登录成功后,就可以进行文件传输了。使用 put 命令。

ftp>put 0170.tar.gz 0170.tar.gz

put 命令 第一个参数是本地文件的文件名,第二个参数是远程文件的文件名。

ftp>put 0170.tar.gz /wp-content/uploads/0170.tar.gz

put 命令 第一个参数是本地文件的文件名,第二个参数是远程文件的文件名,前面加了存储的路径。

7. 退出

ftp>exit

就会退回到 VPS 终端操作环境。

一片枯黄的冬日伴随着春日逐渐返青的草地,像年幼的孩子一般,一股脑的消失在眼前,又像风骚的少妇般,扭着令人心动的丰臀,渐行渐远,慢慢的消失不见;只希望更加温暖的春日阳光早早来临,就像孩子们清澈透亮的笑声一样,传遍大街小巷,人们再也不用蜷缩在厚厚的衣物后面,悄悄的探出一只眼观看这个冰冷又死气沉沉的世界。

或许那样,当春日温暖的阳光照进我寒冷心房的时候,我就会幸福起来;当内心一个个枯黄的小草被青绿的颜色取代的时候,我就会幸福起来。当漫山遍野山花烂漫的时候,我就会幸福起来。

是否,我会真的幸福起来吗?

没有你的日子,或许还一如平常,只是偶尔溢出来的思念,谁人不知,却已被寂寞吞噬。

或许真的一如平常?还只是自欺欺人。那又为何每次走过曾经一起来的路,总会恍若隔世,却又好似昨日。

六年的时间,当思念像毛线般,逐渐绕成一个圈,我出不来,谁人也进不去。

忽然想到,你说过我是一个那么被动的孩子,我就想起来了小时候,舅舅为了我们的安全不让我们下河玩,而每当我们不听话下河被发现之后,舅舅就会用粉笔在地上画个圈,让我们都不准出去,而最后,就只有我一个人被一个粉笔画的圈给禁锢住。被别人笑,我却沉默,或许那时候就有骨子里的认真劲,答应了,就不放弃。答应了,就要做到。

可以,或许我终究还是放弃了?还是......

有时候,是不想出去,有时候是怎么也出不去。

一辈子,零零总总,还有那么多日子,有一个你;人海穿梭中,背对背的感情,却早已渐行渐远,消失不见。一辈子,不多不少,剩余了那么多的日子,没有你,茫茫前行中,背对背的感情,却一点没有减少,完好如初。

人海茫茫,看别人的感情,来来往往,熙熙攘攘,多拥挤,脚不停,心也不曾停下,身边更变换不停,难道唯一就可以动摇得那么轻易?或者,是他们醉酒没醒。还是我们在做梦?

不过,都已不再重要!

不是吗?

你要过上你好的生活,我要过我想要的生活,从一开始,6年前的你,6年后的我,或者都已注定。眼睛一闭,眼睛一睁,恍若隔世,却一辈子......

不过,你一定要幸福,我给不了你,你要给自己!

 

这是一系列对于初学者的 javascript 文章,包括很多的基础知识,由于我也是初学者,所以,翻译过来,大家一起学习,这一系列就叫做 javascript 101 吧,嘿嘿,当然,一般情况下,每篇文章,基本不会超过十分钟。
那么,就先从基本的“值”来说吧。
“值”的类型
在 javascript 中,与其他语言对比,很多不起眼的或者说对其他语言来说是缺点的东西,却恰恰是 javascript 的魅力所在。
看一下下面的例子。有几种数据类型。

var one = 1, oneObject = new Number(1);
log(one === oneObject);
log(typeof(one), typeof(oneObject));

也可以在这里直接进行调试:http://jsfiddle.net/uWup3/.
在这个例子中,使用了“恒等号”,也即是“===”,来对比 值 “1” 和 对象(object)“new Number(1)” 是否相等,肯定的,返回了 “false” ,原因就是 “1” 是原始值,而 “new Number(1)” 的到的是一个对象,可以通过 typeof 来验证。
其他的原始值:"undefined","Null","Boolean","Number"以及 "string",对于涉及到未定义的数据的时候,其值为 “undefined”。

创建对象(object)
在 javascript 中,我们主要关注的还是对象,这也就是为什么 JSON 这么的流行和有用。其中的原因就是对象的灵活性。对于对象和原始值的主要区别就是“对象由多个项目组成”。

var javascript = {
  influences: ['C', 'Java', 'Scheme']
, designer: 'Brendan Eich'
, created: new Date(1995, 0, 1)
};

在此对象(javascript)中的项目(influences/designer/created)被称作“属性”,而且对于属性的值,可以是不同类型的,例如原始值,对象,数组,等。这也就是对象的灵活之处。
还有一种创建对象的方式:

var javascript = new Object({
  influences: ['C', 'Java', 'Scheme']
, designer: 'Brendan Eich'
, created: new Date(1995, 0, 1)
});

此种方式使用了 new Object 创建了一个对象的实例(instance),但是,虽然创建方式不一样,但是根据语言规范,这两种方式创建的对象是一样的。但是此种方式一般不推荐使用。

但是这里唯一需要注意的是,对于 constructor 函数的使用,很多种情况下 constructor 函数都是对象,另外,还有一些系统内置函数,例如 Date();

Constructors 函数
上一段代买,看起来其实不太像代码,而像一些数据的集合,那么这里我们将会创建一个 Constructor 函数(如何能使同一种功能的代码初始化),来使上段代码可以被重复利用。

function Language(designer, created, influences) {
  this.designer = designer;
  this.created = created;
  this.influences = influences;
}

var javascript = new Language(
  'Brendan Eich'
, new Date(1995, 0, 1)
, ['C', 'Java', 'Scheme']
);

这时候,同样的可以在创建一个实例:

var c = new Language(
  'Dennis Ritchie'
, new Date(1972, 0, 1)
, ['B', 'ALGOL']
);

此构造函数可以使用 constructor 属性来访问,例如,此时,c.constructor 将返回:

function Language(designer, created, influences) {
  this.designer = designer;
  this.created = created;
  this.influences = influences;
}

而 javascript.constructor 也将返回同样的代码。

在 ES5 的规范下,还有一些其他的原型对象的属性,例如,toString,还有比较陌生的 hasOwnProperty 方法。

这篇文章就讲到这里,下一篇将会介绍 prototypes (原型),javascript 中非常重要的概念。