为什么我不能在 javascript 中的对象文字中使用原型?

Why cannot I use prototype in Object Literals in javascript?

好吧,我很想了解 javascript 中的原型并找到了很多文章,但是我无法理解为什么我不能在 javascript 中使用对象文字中的原型。众所周知,一切都是从 Object 继承的,所以在那种情况下

function Dog() {
}

Dog.prototype = new Animal;
Dog.prototype.bark = function() {
    console.log("Woof! My name is " + this.name);
};

如果我能够在函数中使用原型,为什么我不能在对象字面量中使用原型,例如下面的例子

 var obj = {
            firstname: 'foo',
            lastname:'bar'
        }
        // this throws an error
        obj.prototype.getMethod = function () {
            console.log('this is a function');
        }

我已经回答了所有这个问题,但它确实没有回答为什么不能在 javascript 中的对象字面量中使用原型的原因。以下是部分参考资料

refrence 1

refrence 2

refrence 3

首先,.prototype 属性 属于函数对象。您不能从普通对象实例访问它。基本上构造函数关联的 .prototype 属性 将在构造实例的内部 [[prototype]] 时使用。这里你有一个实例,如果你想将函数添加到它的原型链中,那么你必须修改它

var obj = { firstname: 'foo', lastname:'bar' };
var pro = Object.getPrototypeOf(obj);
pro.getMethod = function () {
  console.log('this is a function');
};

正如@bergi 指出的那样,如果我们遵循上述方法,则存在将 getMethod 添加到所有实例的风险。但是为了避免这种情况,您也可以这样做,

var obj = { firstname: 'foo', lastname:'bar' };
Object.setPrototypeOf(obj, Object.create({getMethod : function(){
  console.log("Hello");
}}));

console.log(obj.getMethod()); //"Hello"