2016-12-14 50 views
2

嗯,我很好奇学习JavaScript中的原型,发现很多文章,但我无法理解为什么我不能在JavaScript中使用Object literals中的原型。大家都知道,一切都是由Object继承所以在这种情况下,为什么我不能在JavaScript中使用Object Literals中的原型?

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

+1

你检查http://stackoverflow.com/questions/3452414/adding-a-prototype-to-an-object-literal ...? –

回答

1

首先,在.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" 
+2

@LijinJohn当然是的。 ;) –

+0

每个对象都被继承了,对吧?那么为什么我们无法访问对象文字中的原型属性,对象字面值与JavaScript中的函数如此不同? –

+0

请注意,'pro === Object.prototype',所以你可能会*不想*修改它 – Bergi

相关问题