115 lines
1.6 KiB
Markdown
115 lines
1.6 KiB
Markdown
# this
|
|
1. 总结this的指向的规律
|
|
2. 改变this指向的方式
|
|
3. 下面代码的执行结果为
|
|
```js
|
|
function fn2(){
|
|
console.log(this.n)
|
|
var n='n'
|
|
this.n=10
|
|
console.log(n)
|
|
}
|
|
var obj={fn2:fn2, n:1}
|
|
fn2()
|
|
obj.fn2()
|
|
console.log(obj.n, window.n)
|
|
|
|
```
|
|
4.下面代码的执行结果为
|
|
```js
|
|
|
|
function f(){console.log(this)}
|
|
|
|
var obj={
|
|
fn: (function(){
|
|
console.log(this.f)
|
|
// return this.f
|
|
})(),
|
|
f: function(){console.log(this)}
|
|
}
|
|
f()
|
|
obj.f()
|
|
|
|
```
|
|
|
|
5. 下面代码的执行结果为
|
|
```js
|
|
var n = 10
|
|
var obj1={
|
|
n:1,
|
|
f:function(){this.n++; n=this.n++}
|
|
}
|
|
|
|
obj1.f()
|
|
console.log(n)
|
|
console.log(obj1.n)
|
|
window.setTimeout(obj1.f, 1000)
|
|
|
|
```
|
|
|
|
|
|
6. 下面代码的执行结果为
|
|
```js
|
|
console.log(getA)
|
|
if('a' in window){
|
|
var a = ''
|
|
function getA(a){
|
|
a = a||this.a
|
|
console.log(this.a)
|
|
}
|
|
getA(a)
|
|
}
|
|
```
|
|
|
|
|
|
7. 下面代码执行结果为
|
|
```js
|
|
const obj1 = {
|
|
nickName: 'qianguyihao',
|
|
age: 28,
|
|
};
|
|
function fn1() {
|
|
console.log(this);
|
|
console.log(this.nickName);
|
|
}
|
|
fn1.call(this);
|
|
|
|
```
|
|
|
|
8. 下面代码的执行结果为
|
|
```js
|
|
var obj1 = {
|
|
nickName: 'qianguyihao',
|
|
age: 28,
|
|
};
|
|
|
|
function fn1(a, b) {
|
|
console.log(this);
|
|
console.log(this.nickName);
|
|
console.log(a + b);
|
|
}
|
|
|
|
fn1.call(obj1, 2, 4);
|
|
|
|
|
|
```
|
|
|
|
9.下面代码的执行结果为
|
|
```js
|
|
function Father(myName, myAge) {
|
|
this.name = myName;
|
|
this.age = myAge;
|
|
}
|
|
|
|
function Son(myName, myAge) {
|
|
Father.call(this, myName, myAge);
|
|
}
|
|
|
|
const son1 = new Son('hello', 28);
|
|
console.log(JSON.stringify(son1));
|
|
```
|
|
|
|
10.把上面7,8,9 改成apply语法
|
|
|
|
13.把上面7,8,9 改成bind语法
|