js中的this call apply bind
var a = {
a: 'haha',
getA: function () {
console.log(this.a);
}
};
var b = {
a: 'hello'
};
var getA = a.getA;
var getA2 = getA.bind(a);
function run (fn) {
fn();
}
//一下分别输出
a.getA();//haha
//this指向当前调用函数的对象a
getA();//a 对象
//当前的this指向全局this,一般遇到这样的函数调用,fn()=this.fn(),当前this指向全局
run(a.getA);//a 对象
//这里 fn = a.getA = a对象中getA这个函数,fn()this指向全局。所以 a对象
getA2.call(b);// 'haha'
//call(b)幌子。getA.bind(a) 'haha'
原型
function clone(obj) {
//实现
}
var a = {name:'a'};
var b = clone(a);
//完善实现中部分,让一下代码成立
console.log(b.name)//'a'
a.name = 'a1';
console.log(b.name)//'a1'
b.name = 'b';
console.log(b.name)//'b'
console.log(a.name)//'a1'
a.name = 'a2';
console.log(b.name)//'b'
//当b没有值时,b的值是a的值,当b被赋值,ab的值互不影响
第一种答案
function clone(obj){
return Object.create(obj);
}
第二种答案
function clone(obj){
function fn(){};
fn.prototype = obj
return new fn();
}
第三种答案
function clone(obj) {
var ret = {};
ret.__proto__ = obj;//__proto__并不是所有浏览器都支持
return ret;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。