获得徽章 7
- 当试图引用对象的属性时会触发[[Get]]操作,对于默认的[[Get]]操作来说,如果无法在对象本身找到需要的属性,就会继续访问对象的[[Prototype]]链。
let anotherObject = {
a:2
};
let myObject = Object.create( anotherObject );
myObject.a ; // 2展开赞过评论2 - ES6中的箭头函数并不会使用四条标准的绑定规则,而是根据当前的词法作用域来决定this,具体来说,箭头函数会继承外层函数调用的this绑定(无论this绑定到什么)。这其实和ES6之前代码中的self = this机制一样。评论点赞
- 如果经常编写this风格的代码,但是绝大部分时候都会使用self = this或者箭头函数来否定this机制,那么或许应该:1,只使用词法作用域并完全抛弃错误this风格的代码;2,完全采用this风格,在必要时使用bind(...),尽量避免使用self = this和箭头函数。赞过33
- 箭头函数不使用this的四种标准规则,而是根据外层(函数或者全局)作用域来决定this。
function foo(){
//返回一个箭头函数
return (a) => {
//this继承自foo()
console.log(this.a);
}
}
var obj1 = { a:2 };
var obj2 = { a:3 };
var bar = foo.call( obj1);
bar.call( obj2 ); //2,不是3!
箭头函数的绑定无法被修改,(new也不行!)。展开评论点赞 - 在某种情况下,你可能(有意或无意的)创建一个函数的“间接引用”,在这种情况下,调用这个函数会应用默认绑定规则。
function foo(){
console.log(this.a);
};
var a = 2;
var o = {a:3,foo:foo};
var p = {a:4};
o.foo(); //3
(p.foo = o.foo)(); //2展开赞过21 - 如果把null或者undefined作为this的绑定对象传入call,apply,或者bind,这些值在调用时会被忽略,实际应用的是默认绑定规则。
function foo(){
console.log(this.a);
}
var a = 2;
foo.call(null);//2展开评论点赞 - 使用new来调用函数,或者说发生构造函数调用时,会自动执行下面的操作:1.创建(或者说构造)一个全新的对象;2.这个新对象会被执行[[原型]]连接;3.这个新对象会绑定到函数调用的this;4.如果函数没有返回其他对象,那么new表达式中的函数调用会自动返回这个新对象。评论点赞