Javascript对象方法原型

时间:2016-02-07 13:09:12

标签: javascript object javascript-objects

以下方法有何不同之处。哪种方式最好?

    var obj;
        obj = function () {

        }
        obj.prototype = {
         getName: function () {
         console.log("my name");
        }
     }

和这个

 var obj;
    obj = function () {

    }
    obj.getName.prototype = {
    console.log("my name");
    }

两者都一样吗?

3 个答案:

答案 0 :(得分:1)

第一个。

您正在使用新的原始对象覆盖完整的原型对象。因此,现有方法和属性将因此分配而被删除。

第二个

您正在分配新方法,而不是删除现有方法和属性。

编辑:

第二个应该是这样的

obj.prototype.getName = function(){
}

答案 1 :(得分:1)

它们不一样,有效的方法是第一种方式。

或许你想问的是这些之间的区别:

function() Obj {}

Obj.prototype.getName = function() {
       console.log("my name");
};

var obj = new Obj;

vs this

function() Obj {
  this.getName = function() {
     console.log("my name");
  };
}

var obj = new Obj;
答案是两个都是有效的,第一个添加功能到原型链,第二个添加到功能的实例。

让我们从第二个开始,更简单。运行代码obj后,函数名称getName将附加到自身。 obj.getName()会在obj上调用该方法。

然而在第一个调用obj.getName()时,js编译器会查看obj方法getName并且在那里找不到它,所以它会尝试查找它链。 js中的所有对象都具有__proto__属性。另一个对象是什么。当您使用new关键字创建对象时,生成的对象__proto__将设置为fucntion的原型。

委托这样的函数的好处是,假设您使用此函数生成30个对象,那么也不会有30个getName方法。相反,所有对象仍将引用具有getName方法的原型对象。所以将有30个参考。

答案 2 :(得分:0)

不,他们不一样。

您发布的代码不是有效的JavaScript。并引发一个SyntaxError。 我只能假设你问以下哪一个是更好的"将属性赋予Object Prototype的方法:

var foo = {}
foo.prototype = {
   getName: function(){}
}

VS

var foo = {}
foo.prototype = {}
foo.prototype.getName = function(){}

第一种方法更好,因为您没有为原型重新分配新对象 - 它会删除可能存在的所有属性。 所以第一个被认为是更好的。