1、在编程语言中,什么叫语法糖

在编程语言中,"语法糖"是指一种编程语言的语法功能,它并不改变语言的功能,但可以让代码更易读、更易写。它是一种语法上的简化,让程序员能够用更少的代码表达相同的逻辑。比如es6中,一个对象想复用另外一个对象的所有字段,可以这样
const obj2 = {...obj} 

2、在js中,call方法的作用

在JavaScript中,`call` 方法用于在一个对象上调用一个方法,同时指定该方法的 `this` 值。这允许你以不同的上下文来调用函数。
举个例子,假设有一个对象 `person`:

var person = {
  fullName: function() {
    return this.firstName + " " + this.lastName;
  }
}

现在,假设有另一个对象 `person2`:

var person2 = {
  firstName: "John",
  lastName: "Doe"
}

通过使用 `call` 方法,我们可以在 `person2` 上调用 `person` 对象的 `fullName` 方法,并在调用时将 `person2` 作为 `this` 值传递:

person.fullName.call(person2); // 返回 "John Doe"

这样做的效果就相当于将 `person` 对象的 `fullName` 方法应用到 `person2` 对象上,使得 `this` 指向了 `person2`。

3、Object.create函数的作用

`Object.create` 是 JavaScript 中用于创建一个新对象的函数。它的作用是创建一个新对象,新对象的原型(prototype)是作为 `Object.create` 的第一个参数传入的对象。这个函数常常用于实现基于原型的继承。通过将一个现有对象作为原型,可以创建一个继承自该对象的新对象。例子如下:

function Widget(widgetName) {
    this.widgetName= widgetName;
}
 
Widget.prototype.identify = function() {
    return "这是" + this.widgetName;
};
 
function Notice(widgetName) {
    Widget.call(this, widgetName);
}
 
Notice.prototype = Object.create(Widget.prototype);
 
Notice.prototype.display= function() {
    console.log("你好, " + this.identify() + ".");
};
 
var notice1 = new Notice("应用A");
var notice2 = new Notice("应用B");

Object.getPrototypeOf(notice1) === Notice.prototype //true
Object.getPrototypeOf(notice2) === Notice.prototype //true

notice1.display(); // "你好,这是应用A"
notice2.display(); // "你好,这是应用B"

在这个例子中,`Notice.prototype = Object.create(Widget.prototype);` 这行代码的作用是创建一个新对象,该对象的原型为 `Widget.prototype`。这样做的目的是让 Notice 的实例在查找属性和方法时能够共享 Widget 原型上的方法,以便在 Notice 对象上调用 Widget 的方法。这种方法也可以称为原型继承,通过它,可以实现对象间的原型链关系,从而实现属性和方法的继承。

4、在js中,什么数据类型才有prototype这个字段,这个字段有什么作用

在 JavaScript 中,只有函数(Function)数据类型才具有 prototype 这个字段。 JavaScript 中的函数是一种特殊的对象,因此它们可以有属性和方法,其中包括 prototype。

prototype 是每个函数特有的属性,它是一个对象,用于存储可以由特定类型的所有实例共享的属性和方法。通过原型,可以实现属性和方法的共享,从而节省内存空间。当我们尝试访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript 会沿着原型链(prototype chain)向上查找,直到找到这个属性或方法或者到达原型链的顶端为止。

举例来说,如果你创建了一个名为"Car"的构造函数,你可以将"Car.prototype"用来定义所有Car对象实例需要共享的方法,比如"drive"或者"stop"方法。这样,所有通过"Car"构造函数创建的对象都可以共享这些方法,而不是每个对象都拥有一份独立的方法,从而节省内存空间。
举例说明其作用:

function Car(make, model, year) {
  this.make = make;
  this.model = model;
  this.year = year;
}
Car.prototype.drive = function() {
  return "The " + this.make + " " + this.model + " is driving.";
};
Car.prototype.stop = function() {
  return "The " + this.make + " " + this.model + " has stopped.";
};
var myCar = new Car("Toyota", "Corolla", 2022);
console.log(myCar.drive()); // 输出:"The Toyota Corolla is driving."
console.log(myCar.stop()); // 输出:"The Toyota Corolla has stopped."

在这个例子中,我们使用"Car.prototype"来添加"drive"和"stop"方法,这些方法可以被所有通过"Car"构造函数创建的对象所共享。

 

posted on 2024-05-11 16:25  龙种人  阅读(1)  评论(0编辑  收藏  举报