gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 04:22:45 24 4
gpt4 key购买 nike

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

function Dog() {
}

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

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

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

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

refrence 1

refrence 2

refrence 3

最佳答案

首先,.prototype 属性属于函数对象。您不能从普通对象实例访问它。基本上,构造函数相关的 .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 的对象文字中使用原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41143147/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com