Javascript对象方法原型

Javascript对象方法原型,javascript,object,javascript-objects,Javascript,Object,Javascript Objects,以下几点的区别是什么。哪种方式最好 var obj; obj = function () { } obj.prototype = { getName: function () { console.log("my name"); } } 还有这个 var obj; obj = function () { } obj.getName.prototype

以下几点的区别是什么。哪种方式最好

    var obj;
        obj = function () {

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

 var obj;
    obj = function () {

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

两者都一样吗?

不,它们不一样

您发布的代码不是有效的JavaScript。并引发了一个语法错误。 我只能假设您会问,以下哪一项是将属性分配给对象原型的“更好”方法:

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

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

第一个

您正在用新的原型对象覆盖完整的原型对象。因此,由于此赋值,现有的方法和属性将被删除

还有第二个

您正在指定新方法,而不是删除现有方法和属性

编辑:

第二个应该是这样的

obj.prototype.getName = function(){
}

它们是不同的,有效的方法是第一种方法

也许你想问的是这两者之间的区别:

function() Obj {}

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

var obj = new Obj;
对这个

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

var obj = new Obj;
答案是两者都是有效的,第一个向原型链添加函数,第二个向函数实例添加函数

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

而在第一个函数中,当您调用
obj.getName()
时,js编译器将查看
obj
方法
getName
,但在那里找不到它,因此它将尝试在链中查找它。js中的所有对象都具有
\uuuuu proto\uuuu
属性。另一个物体所在的位置。当您使用
new
关键字创建对象时,结果对象的
\uuuu proto\uuuu
设置为function的原型


像这样委托函数的优点是,假设你用这个函数创建了30个对象,那么就不会有30个getName方法了。相反,所有对象仍将引用原型对象,原型对象将具有
getName
方法。因此将有30个参考文献

好吧,试试看。第二个抛出一个异常,所以它显然不同。(实际上)第二个抛出只是一个语法错误。(如果您添加
函数()
,它仍然是一个类型错误)
function() Obj {
  this.getName = function() {
     console.log("my name");
  };
}

var obj = new Obj;