【问题标题】:What is a JavaScript instance?什么是 JavaScript 实例?
【发布时间】:2019-09-10 04:31:03
【问题描述】:

什么是 JavaScript 中的实例?谁能提供一个例子吗?

另外,请解释一下你的代码。

【问题讨论】:

  • 距离考试结束还有多长时间?

标签: javascript object ecmascript-6


【解决方案1】:

instance 只是一个由类 (ES6) 或构造函数创建的对象。这是一个例子:

function Person(name) {
  this.name = name;
}

var john = new Person("John Doe");
console.log(john);
//john is an instance of Person - we can see this by using the instanceof operator
console.log(john instanceof Person);

JavaScript 在定义变量时创建实例,但这些实例只能通过使用 typeof 访问,除非您明确使用 new 构造函数来创建变量:

var str = "Foo Bar";
var num = 123;
var bool = true;
var obj = { abc: "def" }
var arr = [true, 1, "s"];

console.log(typeof str);
console.log(typeof num);
console.log(typeof bool);
console.log(typeof obj);
console.log(typeof arr);
console.log(typeof undefined);
console.log(typeof null);

typeof 有一些技巧 - typeof [] == "object" 因为数组是具有几种不同方法的对象。另一个最常见的问题是typeof null == "object",因为在nullundefined 之间创建JavaScript 时存在差异。

如果要查找任意值的构造函数,使用constructor.name

var str = "Foo Bar";
var num = 123;
var bool = true;
var obj = { abc: "def" }
var arr = [true, 1, "s"];

console.log(str.constructor.name);
console.log(num.constructor.name);
console.log(bool.constructor.name);
console.log(obj.constructor.name);
console.log(arr.constructor.name);

这个技巧也适用于您自己的构造函数和类:

function Person(name) {
  this.name = name;
}

var john = new Person("John Doe");
console.log(john.constructor.name);

【讨论】:

    【解决方案2】:

    当你创建一个对象时! 示例:

    //instancing a image
    var myImage = new Image(100, 100);
    //Append in to body
    document.querySelector("body").appendChild(myImage);

    【讨论】:

      【解决方案3】:

      简单地说,在面向对象编程中,有类和对象。当您实例化或创建类的实例时,您将获得一个对象。

      例如,采取以下 Car 类:

      function Car(myVin) {
          this.vin = myVin;
      }
      
      let myHonda = new Car(“24A6733HJ42983C55”);
      let myFord = new Car(“JJ67100473KL93228”);
      let momsMinivan = new Car(“JF293HJL679904611”);
      

      您刚刚将 Car 类实例化了 3 次。每个都是一个实例。

      ES2015(又名 ES6)引入了 class 关键字和构造函数:

      class Car {
          constructor(myVin) {
              this.vin = myVin;
          }
      }
      

      这涉及更多。

      IMO,如果你真的想学习 OO 编程,最好先学习 C++ 的方式。在那里,您将看到经典继承在起作用,包括构造函数、私有、受保护和公共数据成员、设计模式和其他关键概念的概念。这将为您在深入了解 Ecmascript 经典继承这一知识之前打下坚实的基础。

      在底层,Javascript 具有原型继承; Ecmascript 将经典继承贴在上面。这有点奇怪和 hacky,必须用闭包做一些奇怪的事情来实现隐私。

      有关 C++ 中 OOP 的精彩课程,请参阅下面的链接。

      https://m.youtube.com/watch?v=vz1O9nRyZaY

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-05
        • 2010-10-21
        • 2015-11-08
        相关资源
        最近更新 更多