JS面向对象相关笔记

//新建构造函数
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

你可能感兴趣的:(JS面向对象相关笔记)