js面试题4(this/call/aplly/bind)(面向对象)(垃圾回收和内存泄露)

本文深入探讨JavaScript中的this关键字,解释其根据函数使用场景变化的原理,包括在构造函数中的应用和通过call、apply、bind方法改变指向。同时,介绍了对象创建的几种方式,如字面量、new运算符和构造函数。此外,讨论了对象继承的多种模式,如原型链、构造函数继承和组合继承。最后,概述了浏览器的垃圾回收机制,包括何时回收内存以及可能导致内存泄露的情况和预防措施。
摘要由CSDN通过智能技术生成

对this对象的理解?
this是js 的一个关键字,随着函数的使用场合的不同,this 的值会发生变化。
this对象总是指向函数的调用者。
使用 new 实例化对象,在构造函数中的this指向实例化对象。
可以使用call或apply改变this的指向。
a.call(b)//改变a的this指向,指向b对象

call,bind,apply的区别?
call、apply、bind都是改变this指向的方法。
call:
非严格模式
如果不传参数,或者参数是null或nudefined,this都指向window。
严格模式
第一个参数是谁,this就指向谁,包括null和undefined,如果不传参数this就是undefined。
apply:
和call基本一致,只是传参方式不同。
apply把需要传递给fn的参数放到一个数组(或者类数组)中传递进去,虽然写的是一个数组,但是也相当于给fn一个个的传递。
fn.call(obj, 1, 2);
fn.apply(obj, [1, 2]);
bind:
语法和call一模一样,区别在于立即执行还是等待执行。
fn.call(obj, 1, 2); // 改变fn中的this,并且把fn立即执行。
fn.bind(obj, 1, 2); // 改变fn中的this,fn并不执行。而是返回this改变之后的新fn函数。

实现call,apply,bind函数?

面向对象
对象创建的方式有哪些?
1.字面量创建
const product = {
name: ‘apple’,
category: ‘fruits’,
price: 1.99
}
2.我们可以使用new Object方法,用根对象Object,来创建一个对象。
var obj1 = new Object()
obj1.a = 1 ;//添加属性
3.使用构造函数来创建,使用function关键字,加上对象名称来创建。按照惯例,构造函数始终要应该以一个大写字母开头,而非构造函数则应该以一个小写字母开头。
function MyObj {
this.a = 1;
this.b = 2;
}
var a = new MyObj()

对象继承的方式有哪些?(了解)
1.原型链继承:将被继承的对象中的所有属性都存在于__proto__属性中.
2.借用构造函数继承:使用call()和apply()将父类构造函数引入到子类函数,使用父类的构造函数来增强子类的实例,等同于复制父类的实例给子类。 这种方法就是通过call()apply(),完完全全复制了一份给子类,所以子类的任何操作都不会影响到父类。
3、组合继承(1、2)
4、原型式继承
5、寄生式继承
6、寄生组合式继承

浏览器的垃圾回收机制?(了解)
(什么是垃圾、怎么收垃圾、什么时候收垃圾。)

哪些情况会导致内存泄露?如何避免?
内存泄露是指你用不到(访问不到)的变量,依然占居着内存空间,不能被再次利用起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值