为什么我不能在 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
首先,.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"
好吧,我很想了解 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
首先,.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"