//新建构造函数
function obj(){
this.a = 10;
}
obj.prototype.fn = function(txt){
console.log(txt+'.fn')
}
//创建实例对象
let test = new obj();
console.log(test.a)
//返回结果
10
test.fn('test')
//返回结果
test.fn
//另建一个构造函数
function copy(){
//修改this指向,继承obj函数上的属性
obj.call(this);
//定义只属于copy函数上的属性
this.b = 20;
}
//继承obj函数上的方法
copy.prototype = new obj();
//新建实例
let test2 = new copy();
console.log(test2.a)
//返回结果
10
console.log(test2.b)
//返回结果
20
console.log(test.b)
//返回结果
undefined
test2.fn('test2');
//返回结果
test2.fn
call,apply的使用
function obj(){
console.log(this)
}
obj()
//返回结果
window
function obj(){
console.log(this)
}
obj.call(1)//修改this指向
//返回结果
[Number: 1]
function obj(a,b,c,d){
console.log(a,b,c,d)
}
obj.call(1,2,3,4,5)//call第一个参数之后的参数对应函数中的参数
//返回结果
2 3 4 5
function obj(){
console.log(this)
}
obj.apply(1)//修改this指向
//返回结果
[Number: 1]
function obj(a,b,c,d){
console.log(a,b,c,d)
}
obj.apply(1,[2,3,4,5])//apply的第二个参数是数组,其他效果和call类似
//返回结果
2 3 4 5
网友评论