我已经在 Google 上搜索过这个问题,还检查了 Stack Overflow 的答案。但我无法清楚地理解这一点。任何人都可以帮忙解释一下下面的例子吗?
function myObject(){
this.iAm = 'an object';
myObject.prototype.values = "value";
this.whatAmI = function(){
alert('I am ' + this.iAm);
}
}
var myObject1 = new myObject();
myObject1.values = "value2";
myObject1.iAm = "New";
alert(myObject1.values);
var myObject2 = new myObject();
alert(myObject1.values);
在上面的代码中,如果我使用this.iAm
,它的行为方式与原型(prototype)的行为方式相同。
我是 Javascript 面向对象编程的新手。
我预计会有很多反对票。但我并不关心这个,因为我只是想以一种清晰简单的方式收到我已经找到的解释。
最佳答案
我将尝试猜测/解决您的实际担忧。
请参阅以下代码片段:
function A() {
this.text = "hello";
}
var a = new A();
a.text = "hello world";
实际上,在构造函数(即 this.text
)函数内设置 text
属性或在对象已经创建后(即 a .text
)。基本上,构造函数中的 this
是正在创建的对象,而 a
变量是已经创建的对象。
两者之间的唯一区别是,在调用构造函数期间创建的对象中定义的属性将被创建到整个构造函数创建的所有对象。
现在请参阅以下代码片段:
function A() {}
A.prototype = {
text: "hello"
};
var a1 = new A();
var a2 = new A();
// both will output "hello"
console.log(a1.text);
console.log(a2.text);
A.prototype.value = "bye";
// both will output "bye"
console.log(a1.text);
console.log(a2.text);
结论:构造函数原型(prototype)中定义的属性由共享同一原型(prototype)的所有对象共享。因此,无论您是否使用构造函数创建对象,它们都是事件的。
关于javascript - this 与 Javascript 原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42256151/