我来自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)
时,输出是“函数”,因为函数也是对象,所以为什么输出不是“对象”
答案 0 :(得分:2)
是的Object
是new 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
访问designation
和prototype
继承的内容。