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();

相关内容

热门资讯

我国部署开展 大规模职业技能培... 新华社北京7月15日电 (记者 姜琳) 国务院就业促进和劳动保护工作领导小组近日印发关于开展大规模职...
请简要描述什么是平行宇宙? 请简要描述什么是平行宇宙?百科里的看不懂。如同2条平行线 永远不会相交所以 如果平行宇宙的话你可能...
银魂这句话出自多少集? 银魂这句话出自多少集?是在253话,小玉和银桑之间的一段对话,银桑回答完以后,霸气地拿着洞爷湖在墙上...
小沈阳竟遭《我就是演员》全体导... 小沈阳竟遭《我就是演员》全体导师灭灯,表情略显不服,他真的过气了吗?真的过气了。现在他的热度非常低,...
求曾经看过的一本小说!求书名!... 求曾经看过的一本小说!求书名!内容为有一个小男孩,从小就一直超级倒霉......看变形金刚得了那么Y...
大航海时代ol 购买更多的货物 大航海时代ol 购买更多的货物rt先是引取,就是买卖技能,等级越高就能买入更大量,组队了就能分享到技...
请告诉我关于守护甜心第四季悦梦... 请告诉我关于守护甜心第四季悦梦的资料??????????有吗
人生嘛,就是笑笑别人,顺便再让... 人生嘛,就是笑笑别人,顺便再让别人笑笑。什么意思?人生嘛,就是笑笑别人,顺便再让别人笑笑。什么意思?...
电磁感应的概念和定义是什么? 电磁感应的概念和定义是什么?电磁感应(Electromagneticinduction)现象是指放在...
三元股份相关公司新增一项900... (来源:快查一企业中标了)快查APP显示,三元股份相关公司北京首农畜牧发展有限公司于2025年7月1...