“ Object”在Object构造函数中的真正含义是什么?

时间:2019-09-06 05:13:49

标签: javascript

我来自Java / C#背景,传统的OOP语言。我真的很难理解javascript世界。下面是一个示例和我的问题:

var o = new Object(123);

Q1-实际上是Object中的new Object(),例如

function Object() {
   ...
}

Q2-如果问题1的答案为是,那么我对Object.prototype感到困惑,这意味着prototype是对象函数的属性,那么函数如何具有其属性?那么我们如何在像这样的函数中添加新属性

function Object() {
   ...
   prototype: ...          //obviously this is not the right syntax 
}

有人能为此提供基本代码吗?

Q3-我检查console.log(typeof Object)时,输出是“函数”,因为函数也是对象,所以为什么输出不是“对象”

1 个答案:

答案 0 :(得分:2)

是的Objectnew Object(123)中的函数。

ES5类这样的旧版本就是这样写的

function MyClass () {
    // .....
}

但是在ES6中,可以像Java / C#一样使用原始的class关键字

class MyClass 
{
    constructor() {
        // ...
    }
}

在JavaScript中,prototype用于继承类属性,并且该概念适用于旧版ES6

根据MDN文档,Object.Prototype

  

JavaScript中几乎所有对象都是Object的实例;一个典型的对象从Object.prototype继承属性(包括方法),尽管这些属性可能会被遮盖(也就是被覆盖)。但是,可以故意创建一个不正确的对象(例如,通过Object.create(null)),也可以对其进行更改以使其不再是真实的(例如,使用Object.setPrototypeOf)。

     

所有对象都可以通过原型链看到对Object原型对象的更改,除非经受这些更改的属性和方法沿原型链进一步被覆盖。这提供了一种非常强大的机制,尽管具有潜在的危险性,它可以覆盖或扩展对象的行为。

原型示例:

请考虑以下Employee

function Employee() 
{
    this.organization = 'xyz';
}

如果要向该details类添加函数Employee属性,则可以使用prototype。示例:

Employee.prototype.details = function() 
{
    this.age = 26;
    this.designation = 'Software Engineer';
    // ....
}

现在,创建该Employee类的对象

var emp = new Employee();
console.log(emp.organization, emp.age, emp.designation);

请注意,您可以使用age访问designationprototype继承的内容。