参考朋友,学习一波。
问题 1:什么是 JavaScript 对象? 如何创建 JavaScript 对象?
回答:
JavaScript 对象是具有状态和行为(属性和技能)的实体。 因为 JavaScript 是一种基于对象的语言,所以 JavaScript 中的一切都是对象。
JavaScript 是一种基于模板的语言,而不是基于类的语言。 它支持直接创建对象而无需定义类。
JavaScript 支持以下三种创建对象的方式。
1.创建带大括号的对象
使用花括号创建对象的语法如下:
对象={属性1:值1,属性2:值2....属性N:值N}
属性和值之间用“:”分隔
我们来看一个使用花括号创建对象的例子:
2.使用new关键字创建对象实例
直接创建对象的语法如下:
varobjectname = newObject();
我们以使用 new 关键字创建对象为例:
3.通过构造函数创建对象
创建一个带有参数的方法,通过该方法可以将这些参数中的每个值分配给当前对象。
问题 2:什么是 JavaScript 作用域?
回答:
作用域决定了代码特定部分中变量、对象和函数的可访问性。
在 JavaScript 中,有两种类型的作用域。
1. 全球范围
在函数外部定义的变量位于全局范围内。 可以从代码的任何部分访问在全局范围内定义的变量。 我们来看一个反例:
varname='TechBeamers';
console.log(name);//日志'TechBeamers'
函数日志名称(){
console.log(name);//'name' 在这里和其他地方都可以访问
logName();//记录'TechBeamers'
2. 本地范围
函数中定义的变量位于局部范围内。 不同的函数可以使用同名的变量。 这是因为这些变量严格绑定到定义它们的函数(每个变量都有不同的作用域),但无法在其他函数中访问。 我们来看一个反例:
//全局作用域
函数样本函数(){
//本地作用域#1
函数sample2Function(){
//本地作用域#2
//全局作用域
函数sample3Function(){
//本地作用域#3
//全局作用域
问题3:this在JavaScript中代表什么?
回答:
所有主要语言都使用此关键字来引用类当前实例化的对象。 然而,在 JavaScript 中,this 指的是具有“方法”的对象。 函数的调用场景不同,this指向的内容也不同。
全球范围
如果当前没有可用的对象,则这表示全局对象。 在 Web 浏览器中,窗口是代表文档、位置、历史记录和其他一些有用属性和技巧的顶级对象。 让我们编写一个示例代码:
window.Obj="我代表窗口对象";
警报(窗口。Obj);
Alert(this.Obj);//我是窗口对象
警报(窗口===this);//true
函数调用场景:
在函数调用的情况下,this 指的是全局对象。
window.Obj="我代表窗口对象";
函数测试函数(){
Alert(this.Obj);//我是窗口对象
警报(窗口===this);//true
测试函数();
调用对象方法:
当调用对象构造函数或其任何方法时, this 引用该对象的实例。 它类似于任何基于类的语言。
所有主要语言都使用“this”关键字来引用当前由类实例化的对象。 然而,在 JavaScript 中,“this”指的是“拥有”该方法的对象。 尽管这会有所不同,但会随着函数调用的发生方式而变化。
全球范围。
如果当前没有可用的对象,则“this”代表全局对象。 在网络浏览器中,“窗口”是顶级对象,它代表文档、位置、历史记录以及一些有用的属性和方法。 让我们来看一个示例代码。
window.Obj="我代表窗口对象";
警报(窗口。Obj);
Alert(this.Obj);//我是窗口对象
警报(窗口===this);//true
函数调用的场景。
在函数调用的情况下,“this”指的是全局对象。
window.Obj="我代表窗口对象";
函数测试函数(){
Alert(this.Obj);//我是窗口对象
警报(窗口===this);//true
测试函数();
调用对象方法。
当调用对象构造函数或其任何方法时,“this”指的是对象的实例。 它类似于任何基于类的语言。
window.Obj="我是窗口对象";
函数测试函数(){
this.Obj="我是测试对象";
这。 验证1 = 函数() {
alert(this.Obj);//我是Test对象
};
TestFunction.prototype.Verify2=函数(){
alert(this.Obj);//我是Test对象
};
vartf=newTestFunction();
tf。 验证1();
tf。 验证2();
问题4:Prototype在JavaScript中代表什么?
回答:
每个JavaScript函数都有一个prototype属性(默认情况下该属性为空),主要用于实现继承。 我们将方法和属性添加到函数的原型中,以便函数实例可以使用这些方法和属性。 让我们举一个反例来估计正方形的边长。
函数矩形(x,y){
这个.x=x;
这个.y=y;
矩形.prototype.perimeter=函数(){
return2*(这个.x+这个.y);
varrect=newRectangle(4,2);
console.log(rect.perimeter());//输出'12'
问题 5:什么是 JavaScript 闭包?
回答:
闭包是在另一个函数内定义的 JavaScript 函数。 这就是为什么它具有访问三种类型范围的特殊权限,如下所示:
内部作用域:即其括号内定义的变量。
外部函数作用域:闭包函数的变量。
全局作用域:即变量被定义为全局变量。
注意:闭包除了可以访问外部函数变量之外,还可以查看其参数。 但它不能调用外部函数的参数对象。 另外,它还可以直接调用外部函数的参数。
下面的代码示例描述了通过在另一个函数中添加一个函数来实现闭包。
函数outerFunc(arg1,arg2){
varparam="我关闭了。";
//内部函数访问外部函数变量和参数
函数内部Func(){
返回arg1+arg2+""+参数;
返回innerFunc();
外部函数(“arg1”,“arg2”);
问题 6:为什么 JavaScript 中有时使用 self 而不是 this ?
回答:
JavaScript 中的内部函数可以访问外部函数中定义的所有变量。 另外,this 变量是一个例外。 因为嵌套函数只是一个常规函数,而不是一个对象,所以它的 this 引用了全局命名空间。 我们看下面的反例。
varaProperty = '全局';
varmyObject = {
外层函数:函数(){
this.aProperty = '本地';
设置超时(函数(){
console.log(this.aProperty);//输出'全局'
},1);
};
对于这一点,我们看到上面的setTimeout函数,this指的是全局对象。 我们需要获取嵌套函数中对象的引用,这就是 self 关键字的作用。 它不是一个特殊变量,因此不能被其他函数重绘。 因此,在内部函数中使用 self,我们可以引用本地对象。 下面是示例代码。
varmyObject = {
外层函数:函数(){
varself=这个;
this.aProperty = '本地';
设置超时(函数(){
console.log(self.aProperty);//输出'local'
},1);
};
问题 7:什么是匿名函数以及何时应该使用它们?
回答:
匿名函数是在运行时动态声明的函数。 它们被称为匿名函数,因为它们没有像普通函数那样的名称。
我们使用函数运算符来声明匿名函数,而不是函数声明。 此外,函数运算符可用于在任何表达式中创建新函数。
下面是命名函数的典型示例。
函数测试函数()
警报(“欢迎!!”);
测试函数();
使用匿名函数实现相同的反例。
vartestFunction = 函数()
Alert("缩放!缩放!缩放!");
飞向月球();
匿名函数主要用于反弹函数、风暴注册、创建临时或私有作用域、闭包和递归。
问题8:“==”和“===”有什么区别?
这些都是JavaScript提供的运算符——严格方程和类型转换方程。
如果要比较的值具有相同的数据类型,则严格相等 === 返回 true。 举个反例,“2”不等于2,即(2″===2)会返回false。
其次,强制转换等于 (==),它手动将变量转换为值,无论数据类型如何。 作为反例,这里的“2”将等于2(“2”===2)将返回true。
总结一下,双等于(==)是一个手动转换类型的相等运算符,(===)是一个严格相等运算符,即它不手动转换值。
问题 9:JavaScript 数据类型有哪些?
回答:
JavaScript 支持三种基本数据类型、两种复合数据类型和两种特殊数据类型。 接下来,我们枚举每个类别中的数据类型。
原始数据类型。
细绳
数字
布尔值
复合数据类型。
目的
大批
特殊数据类型。
无效的
不明确的
问题10:什么是JavaScript的原型继承?
回答:
大多数面向对象语言都支持类和对象,一个类可以继承另一个类。
JavaScript 继承通常是通过原型来实现的。 原型的本质是一个Object实例,它在同类型的多个实例之间共享,并且包含需要共享的方法(也可以是数组)。
JavaScript 提供了三种不同类型的原型继承。
1.代理(即原型链)。
代理原型是泛型javascript 方法的定义,其中一个对象可以充当另一个对象。 新对象通过继承代理原型来引用泛型类型。
当我们尝试访问对象的属性时javascript 方法的定义,我们首先检查该属性是否存在于对象本身中。 如果该属性不存在,请检查原型中是否存在该属性。 就这样,我们逐渐深入原型链,直到最终的泛型。
2.链接继承(即Mixins、Object.Assign())。
这是一个对象从另一个源对象复制属性的过程。 JavaScript 中有一个名字叫做 mixins。 此过程利用了 JavaScript 方法 Object.assign()。 在 ES6 之前,使用 .extend() 函数。
3. 函数(不要与函数式编程混淆)。
在 JavaScript 中,函数创建对象。 不一定是构造函数(或类)。 这就是所谓的鞋厂功能。 定义一个继承鞋厂功能并减少属性和技巧的对象。