20180423-20180428 前端知识填坑

Class 的基本语法

JavaScript 语言中,生成实例对象的传统方法是通过构造函数。下面是一个例子。

function Point(x, y) {
  this.x = x;
  this.y = y;
}

Point.prototype.toString = function () {
  return '(' + this.x + ', ' + this.y + ')';
};

var p = new Point(1, 2);

上面这种写法跟传统的面向对象语言(比如 C++ 和 Java)差异很大,很容易让新学习这门语言的程序员感到困惑。

ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过class关键字,可以定义类。

基本上,ES6 的class可以看作只是一个语法糖,它的绝大部分功能,ES5 都可以做到,新的class写法只是让对象原型的写法更加清晰、更像面向对象编程的语法而已。上面的代码用 ES6 的class改写,就是下面这样。

//定义类
class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }

  toString() {
    return '(' + this.x + ', ' + this.y + ')';
  }
}

上面代码定义了一个“类”,可以看到里面有一个constructor方法,这就是构造方法,而this关键字则代表实例对象。也就是说,ES5 的构造函数Point,对应 ES6 的Point类的构造方法。

Point类除了构造方法,还定义了一个toString方法。注意,定义“类”的方法的时候,前面不需要加上function这个关键字,直接把函数定义放进去了就可以了。另外,方法之间不需要逗号分隔,加了会报错。

————————————————————————————转载自http://es6.ruanyifeng.com/#docs/class      了解更多请自行前往~

URI与URL的区别

首先给大家举个例子,有一家公司的总经理,某天,给了我一张名片,上面写了他的头衔,北京XXX公司总经理 张三,还有他的办公室地址,北京市海淀区长安街35号北京XXX公司总经理办公室,那么,我以后给我的朋友吹牛,我认识北京XXX公司的总经理张三,我的朋友都知道北京XXX公司的总经理是一个叫张三的人,那么,这个头衔就和张三对应起来了,只要一说到这个头衔,大家都知道说的是张三,反应到网络世界,这个头衔就叫做URI,只要你给我一个URI,我就知道它代表了什么,比如,http://www.sina.com.cn代表了新浪网,[email protected]代表了某一个人的qq邮箱,你的qq号也是一个URI(腾讯服务器内可以识别就是你的QQ账户),URI就是网络资源的头衔,通过URI标记可以把网络世界里面的每一个事物都加以标记并区分开来。

好的,现在出现了一个问题,你现在知道北京XXX公司总经理是张三,“北京XXX公司总经理”就是张三这个人的URI,可是,我让你亲自去和张三见一面,你做得到吗?你肯定做不到,因为你不知道他的地址,虽然你有他的URI头衔,但是除此以外,你对他具体的情况一无所知,于是你要定位到他,你就必须得到他的办公室地址,通过“北京市海淀区长安街35号北京XXX公司总经理办公室”这个地址,你就找到了张三。反应到网络世界,网络世界里面的每一个资源不光有自己的头衔,还要能够被人访问,被人找到,所以,网络地址是必须的,否则,这个网络资源的存在没有任何意义,这个地址就叫做URL。

通过上面的描述,可以发现,URI强调的是给资源标记命名,URL强调的是给资源定位,但是你会发现,URL显然比URI包含信息更多,我通过URL也可以知道张三是总经理,并且我还知道了他的地址,所以大多数情况下大家觉得给一个网络资源分别命名和给出地址太麻烦,干脆就用地址既当地址用,又当标记名用,所以,URL也充当了WWW万维网里面URI的角色,但是他比URI多了一层意义,我不光知道你叫什么,我还知道你在哪里。我们在浏览器输入的都是URL,因为我们输入的目的是为了找到某一个资源,当然你输入的是URI也是没错的,因为URL也是URI。

总结:URI标记了一个网络资源,仅此而已; URL标记了一个WWW互联网资源(用地址标记),并给出了他的访问地址。

——解决思路———————-
url是一个地址,uri是一个资源。
你最好去了解下rest和odata,这样对uri的理解可以深刻些。

——————————————————————————————————————————

escape,encodeURI,encodeURIComponent的区别

escape 和 encodeURI 都属于 Percent-encoding,基本功能都是把 URI 非法字符转化成合法字符,转化后形式类似「%*」。它们的根本区别在于,escape 在处理 0xff 之外字符的时候,是直接使用字符的 unicode 在前面加上一个 「%u」,而encodeURI则是先进行 UTF-8,再在 UTF-8 的每个字节码前加上一个 「%」;在处理 0xff 以内字符时,编码方式是一样的(都是「%XX」,XX为字符的 16 进制 unicode,同时也是字符的 UTF-8),只是范围(即哪些字符编码哪些字符不编码)不一样。(杨易提醒)encodeURI 是W3C 的标准,而 Escape 是非标准。举一个例子:知乎的「知」字,可以知道它的 unicode 为 0x77e5,对它进行 UTF-8 编码,变成了三个字节:0xe7, 0x9f, 0xa5因此,如果是使用 escape 编码「知」,得到的结果就是 「%u77E5」;encodeURI 得到的结果则是 「%E7%9F%A5」Escape 的编码有一个弊端在于,它后面是 4 位 16 进制,故不支持基本多文种平面(BMP)外的字符(unicode 大于 0xffff)的字符;而 encodeURI 是基于 UTF-8 的,编码本身理论上可以支持 0x10ffff 内的字符(实际上现在的 JavaScript 不支持 BMP 外的字符,所以 encodeURI 也不支持 )。encodeURI 和 encodeURIComponent 的区别在于需要转义的字符范围不一样,参考 @黄家兴 的答案。使用场景方面,也可以可以参考他的答案,但是不同意这一句:如果只是编码字符串,不和URL有半毛钱关系,那么用escape。encodeURI(Component) 一般用在 URI 上,但是不是一定就要用在 URL 上。比如如果 POST 请求的 Request Header 中 Content-Type 为「application/x-www-form-urlencoded」, 那么 Request Payload 里面的数据一般就是使用 encodeURI(Component) 编码的。(和 URL 的 querystring 一样)。如果没有必要,不要使用 escape。

——————————————————————————————————————————转自知乎https://www.zhihu.com/question/21861899

————————————————————————————————————————————————————————

Object.create() 方法会使用指定的原型对象及其属性去创建一个新的对象。

————————————

猜你喜欢

转载自www.cnblogs.com/locim/p/8967520.html