看到小夜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 终端操作环境。

ECMAScript 5.1 规范定义了调用内建构造函数时候的行为,例如,不仅 new Array(1,2) 是正确的,直接使用 Array(1,2) 也是正确的。也就是说这两种方式都可以用,但是结果却不同,第一种创建并初始化一个新的数组对象,而第二种则返回一个具有那两个参数的表达式,但是其构造函数必须是函数才行。

例如,Object() 可以进行数据类型的转换,而 String() 也可以,例如:String();

var a = new String(1);
console.log(a);
// { '0': '1' }
var b = String(1);
console.log(b);
// '1'

Date() 构造函数也可以进行类型转换,但是这样有时候有比较混乱,尤其是对那些只想让日期可读的初学者。例如,

var a = new Date(2012, 0, 1);
// Sun, 01 Jan 2012 00:00:00 GMT
Date(2012, 0, 1)
// 'Sun Jun 10 2012 11:28:03 GMT+0100 (BST)'

第一段代码返回来日期对象,而第二段代码返回了原始的日期字符串。

从构造函数返回的对象

在规范的 13.2.2 节,从构造函数返回的对象的行为被定义为:如果 使用 Type(result) 来检测返回的是 object 的话,则直接返回 result。

这使得构造函数返回另一个对象而不是一个实例。

function Shape() {
  return {
    x: 1, y: 1
  };
}

Shape.prototype = {
  move: function() {}
};

var shape = new Shape();
shape.move();
// TypeError: Object #<Object> has no method 'move'

返回没有此方法的结果,因为 shape 返回 {x: 1, y: 1} ,而其没有 move() 方法,可以使用 instanceof 来测试是否构造函数是作为构造函数来调用的。

function Shape() {
  if (this instanceof Shape) {
    // An object is being instantiated
  } else {
    return {
      a: 'b'
    };
  }
}

Shape.prototype = {
  move: function() {}
};

var shape = new Shape();
shape.move(); //instance nothing returned

Shape(); // Returns { a: 'b' }

jQuery 也使用了类似的方法来实例化 jQuery.Event 对象,而不需要 new 关键字。

jQuery.Event = function( src, props ) {
  // Allow instantiation without the 'new' keyword
  if ( !(this instanceof jQuery.Event) ) {
    return new jQuery.Event( src, props );
  }

此工厂式的行为也可能适合某些API – Dojo 在 NodeList 也使用了它。

结论

调用内置构造函数时,如果不使用关键字,则是类型转换,但是某些构造函数的行为又好像使用了 new 关键字,为了避免因为丢掉 new 关键字而造成的 bug ,所以,还是要牢记,加 new 关键字,和不加,是不一样的。

所以,当编写构造函数的时候,这个行为可以被用来创建类工厂式的 API,这是因为一个构造函数被当作函数调用的话,其行为可以被检测得到。

想了解更多这方面的知识,请在 ECMAScript 规范中搜索 called as a function 。