《JavaScript语言精粹》读书笔记(一)

前言

本文是对《JavaScript语言精粹》的一些整理


内容

级联形式继承

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
var Mammal = function (name) {
this.name = name;
};

Mammal.prototype.get_name = function () {
return this.name;
};;

Mammal.prototype.says = function () {
return this.saying || '';
}

Function.prototype.method = function (name,func) {
if(!this.prototype[name]){
this.prototype[name] = func;
return this;
}
}

Function.method('inherits',function (Parent) {
this.prototype = new Parent();
return this;
});

var Cat = function (name) {
this.name = name;
this.saying = 'meow';
}
.inherits(Mammal)
.method('apple',function () {
console.log("apple");
})

var car = new Cat("sail");
car.apple();

这种方式隐藏了无所谓的prototype细节。

使用构造器函数存在一个严重的危害。如果在调用构造函数时忘记了在前面加new 前缀,那么this将不会被绑定到一个新对象。悲剧的是,this将被绑定到全局对象。不但没有扩充新对象,反而破坏了全局环境变量。


移除字符串首尾空白

如今的标准已经有了String.prototype.trim()

trim() 方法会从一个字符串的两端删除空白字符。trim() 方法并不影响原字符串本身,它返回的是一个新的字符串。

以前没有这个方法,可以这样实现

1
2
3
4
5
6
7
8
9
10
11
12
Function.prototype.method = function (name,func) {
if(!this.prototype[name]){
this.prototype[name] = func;
return this;
}
}

String.method('trim', function () {
return this.replace(/^\s+|\s+$/g,'');
})

console.log('"' + " neat ".trim() + '"');
关注我的微信公众号[李一二],即时看更多的文章