JavaScript apply 和 call 和 bind,原型和原型链的理解
创始人
2024-05-30 15:37:17
0

apply 和 call 改变 this 指向

apply 和 call 都可以让函数或方法调用
apply 第二参数是数组
call 参数是多个值

function f1(x,y){return x+y
}
f1()
f1.apply(null,[10,20]) // 第一个参数是 改变的 this 指向
f1.call(null,10,20)
// 如果函数有返回值
let r1 = f1.apply(null,[10,20])
console.log(r1)

bind (复制) 也可以改变 this 指向

使用 bind 不能直接调用

function f1(x,y){console.log((x+y))
}
// 复制 
let r1 = f1.bind(null,10,20)
// 调用
r1()
// 或者如下 结果相同
let r1 = f1.bind(null)
r1(10,20)

原型

每个函数中有 prototype 属性 称之为原型,因为这个属性的值是一个对象,也称为原型对象

原型的作用

作用:存放属性和方法 目的是:节省内存空间
作用:实现继承 目的是:节省内存空间

原型链

对象中都有 proto 属性,指向构造函数的原型对象(prototype)(son.proto === Son.prototype),原型对象也有 proto 属性,指向原型对象的原型对象,这样一层一层形成的链式结构称为原型链,最顶层找不到则返回 null
借用别人的图

function Person(name, age) {this.name = name;this.age = age;
}Person.prototype.sing = function () {console.log("唱");
};// 静态方法 只能用构造函数调用
Person.play = function () {console.log('play');
}
Person.sex = '男'Person.play() // play
console.log(Person.sex); // 男function Son(name, age, sex) {// 借用构造函数 --> 解决属性重复问题Person.call(this, name, age);this.sex = sex;
}// 这种赋值形式,改变原型指向 --> 解决方法继承
Son.prototype = new Person();// constructor 改回 Son 的指向构造函数
Son.prototype.constructor = Son;const son = new Son("xm", 10, "男");console.log("son", son);
// son.__proto__ === Son.prototype true
son.sing();

相关内容

热门资讯

全国首个!在三亚建成→ 转自:三亚发布近日,“三亚崖州湾海南热带海洋学院海洋牧场教学科研示范基地项目”顺利通过验收。该项目由...
山东3家企业进入全球汽车供应链... 来源:泰山财经泰山财经记者 李迪日前,由《中国汽车报》社与中国汽车工程研究院股份有限公司联合主办的“...
哈尔滨都市圈环线建设打响“夏季...   项目建设施工现场。  本报讯(记者 刘希阳)记者从省交通运输厅获悉,哈尔滨都市圈环线项目目前打响...
建筑巧夺天工 冰城魅力无限   ■本报记者 周辰/文 杨锐/摄  “哈尔滨真是一座美丽的城市,非常值得向全世界宣传。尤其是哈尔滨...
完成跨越五年的“复仇”,朱雨玲... 转自:上观新闻“冤家”路窄,狭路相逢。7月13日,在WTT美国大满贯半决赛的赛场上,代表中国澳门参赛...
奇幻修真小说最好是完结的还带有... 奇幻修真小说最好是完结的还带有灵兽的哪种《穷人修仙传》 不是凡人七届传说 最好的 最喜欢 最经典
如何去除伤痕、伤印 如何去除伤痕、伤印如果身上有伤印的话有怎么去?有没谁用过好的去伤痕、伤印的东西,介绍一下啊,要有效果...
赵县的历史名人 赵县的历史名人李嘉佑,唐代诗人,字从一。赵州(今河北赵县)人。天宝七载(748)登进士第,授秘书省正...
新年祝福语数字成语接龙? 新年祝福语数字成语接龙?一帆风顺,二龙戏珠,三羊开泰,四季如春,五福临门。六六大顺,七星高照,八方来...
《冬夜读书示子聿》意思 《冬夜读书示子聿》意思教他读书的方法