继承如何在ES5-Javascript中工作?

时间:2015-12-02 18:19:38

标签: javascript ecmascript-5

对于以下代码,

           var customer={
                name: "Tom Smith",

                speak: function(){
                    return "My name is " + this['name'];
                },

                address: {
                    street: '123 Main St',
                    city: "Pittsburgh",
                    state: "PA"
                }
            };

以下是我对客户对象的可视化,

enter image description here

我的问题:

customer对象是否仅继承Object.prototype的属性(内置函数)?

Object函数类型对象的属性(内置函数)是否也用于继承?

如果是,customer对象继承Object属性的语法是什么?

1 个答案:

答案 0 :(得分:2)

  

以下是我对客户对象的可视化

如果您使用术语 [[prototype]] 而不是 __ proto __ 会更好 - 正如您所看到的,.__proto__只是一个吸气剂/ setter继承自Object.prototype

  

客户对象是否仅继承Object.prototype的属性(内置函数)?

是。虽然你可以add your own properties to Object.prototype,但它们也会被继承,它不仅仅是内置的。

  

Object的属性(内置函数)是否也用于继承?

没有。它们是静态函数,应该以对象作为参数调用,而不是对象方法。

  

客户对象继承对象属性的语法是什么?

Object是一个函数,通常你不希望继承它。如果您真的想要,可以使用Object.create(Object)

此外,ES6添加了一种新的方法,因为class es也从其父级继承静态方法:

class MyObject extends Object {
    static myCreate(x) {
        return this.create(x);
    }
}