【问题标题】:Javascript in Object Literal approach difference between calling a method direct and using Object.create?Object Literal方法中的Javascript直接调用方法和使用Object.create之间的区别?
【发布时间】:2016-07-03 07:18:29
【问题描述】:

假设这是我的对象

// Object Literal
var personObjLit = {
    firstname : "John",
    lastname: "Doe",
    greetFullName : function() {
        return "personObjLit says: Hello " + this.firstname +
        ", " + this.lastname;
    }
}

我想调用greetFullName方法,我可以用两种方法调用。

  1. var personFullName = personObjLit.greetFullName();
  2. var personObjLitObject = Object.create(personObjLit);

我想知道这两者有什么区别。我的意思是它只是不同的方法,或者它会影响记忆或其他东西。

【问题讨论】:

  • 您的“第二个调用 greetFullName 的方式”甚至不调用 greetFullName
  • “或者它会影响内存” - 显然第二种方式涉及到拥有两个对象,而第一个只有一个,那么你怎么看?但是由于内存问题,您不会选择其中一种,而是根据代码实际应该执行的操作来选择其中一种。
  • 第二种方式创建一个以personObjLit为原型的新对象,这不太可能是你想做的。

标签: javascript object object-literal object-create


【解决方案1】:

Object.create 创建一个新对象,其原型设置为您传递给它的对象。考虑这段代码:

var a = {};
var b = Object.create(a);

a.propA = 'valueA'; // add a property to a
b.propB = 'valueB'; // add a property to b

a.propA; // "valueA"
b.propB; // "valueB"
b.propA; // "valueA" - inherited from a, which is b's prototype
a.propB; // undefined - only exists on b

当您有兴趣创建具有特定原型的新对象时,您只想使用Object.create。如果您没有理由这样做,那么对象字面量语法就是最佳选择。

有关原型链的更多信息,请参阅https://developer.mozilla.org/en/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

【讨论】:

    猜你喜欢
    • 2012-05-08
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 2022-07-25
    • 1970-01-01
    相关资源
    最近更新 更多