Skip to content

Commit

Permalink
fixed stone0090#21
Browse files Browse the repository at this point in the history
  • Loading branch information
stone committed Dec 8, 2016
1 parent 5b28cc5 commit 8073a3e
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 6 deletions.
9 changes: 5 additions & 4 deletions 1.5-Expression&Operators/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,12 @@ console.log("x" in o); // false,这个属性在对象中不再存在
console.log(delete o.toString); // true,什么也没做,toString是继承来的
console.log(delete 1); // true,无意义

var a = [1,2,3]; // 定义一个数组
console.log(delete a[2]); // true,删除最后一个数组元素
console.log(2 in a); // false,元素2在数组中不再存在
var a = ["x","y","z"]; // 定义一个数组
console.log(2 in a); // true,下标为2的元素,在数组中存在
console.log(delete a[2]); // true,删除下标为2的元素(最后一个数组元素)
console.log(2 in a); // false,下标为2的元素,在数组中不再存在
console.log(a.length); // 3,数组长度并不会因 delete 而改变
console.log(a[2]); // undefined,元素2所在的位置被空了出来
console.log(a[2]); // undefined,下标为2的元素,位置被空了出来
console.log(delete a); // false,通过 var 语句声明的变量不能删除

function f(args){} // 定义一个函数
Expand Down
2 changes: 1 addition & 1 deletion 2.4-Scope&Closure/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,7 @@ JavaScript 闭包是一种强大的语言特性。通过使用这个语言特性

## `this` 关键字

谈到作用域和闭包就不得不说 `this` 关键字,虽然它们之间并没有关联,但是它们一起使用却容易让人产生疑惑。下面列出了使用 `this` 的大部分场景,带大家一探究竟。
谈到作用域和闭包就不得不说 `this` 关键字,虽然它们之间关联不大,但是它们一起使用却容易让人产生疑惑。下面列出了使用 `this` 的大部分场景,带大家一探究竟。

`this` 是 JavaScript 的关键字,指函数执行时的上下文,跟函数定义时的上下文无关。随着函数使用场合的不同,`this` 的值会发生变化。但是有一个总的原则,那就是 `this` 指代的是调用函数的那个对象。

Expand Down
2 changes: 1 addition & 1 deletion 2.5-Prototype/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@ Person.prototype.sayHi = function(){
friend.sayHi(); // "hi"(没有问题!)
```

以上代码先创建了 `Person` 的一个实例,并将其保存在 `person` 中。然后,下一条语句在 `Person.prototype` 中添加了一个方法 `sayHi()`。即使 `person` 实例是在添加新方法之前创建的,但它仍然可以访问这个新方法。其原因可以归结为实例与原型之间的松散连接关系。当我们调用 `person.sayHi()` 时,首先会在实例中搜索名为 `sayHi` 的属性,在没找到的情况下,会继续搜索原型。因为实例与原型之间的连接只不过是一个指针,而非一个副本,因此就可以在原型中找到新的 `sayHi` 属性并返回保存在那里的函数。
以上代码先创建了 `Person` 的一个实例,并将其保存在 `friend` 中。然后,下一条语句在 `Person.prototype` 中添加了一个方法 `sayHi()`。即使 `person` 实例是在添加新方法之前创建的,但它仍然可以访问这个新方法。其原因可以归结为实例与原型之间的松散连接关系。当我们调用 `friend.sayHi()` 时,首先会在实例中搜索名为 `sayHi` 的属性,在没找到的情况下,会继续搜索原型。因为实例与原型之间的连接只不过是一个指针,而非一个副本,因此就可以在原型中找到新的 `sayHi` 属性并返回保存在那里的函数。

尽管可以随时为原型添加属性和方法,并且修改能够立即在所有对象实例中反映出来,但如果是重写整个原型对象,那么情况就不一样了。我们知道,调用构造函数时会为实例添加一个指向最初原型的 `[[Prototype]]` 指针,而把原型修改为另外一个对象就等于切断了构造函数与最初原型之间的联系。请记住:实例中的指针仅指向原型,而不指向构造函数。看下面的例子。

Expand Down

0 comments on commit 8073a3e

Please sign in to comment.