这个vs原型Javascript

时间:2017-02-15 17:22:08

标签: javascript oop

我已经使用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,它的行为与原型行为相同。

我是Javascript面向对象编程的新手。

我期待很多投票。但我并不关心这一点,因为我只是希望以一种清晰简单的方式得到一个解释,我已经找到了。

1 个答案:

答案 0 :(得分:1)

我将尝试猜测/解决您的实际问题。

请参阅以下代码段:

function A() {
   this.text = "hello";
}

var a = new A();
a.text = "hello world";

实际上,在构造函数(即text)函数中设置this.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);

结论:构造函数原型中定义的属性由共享相同原型的所有对象共享。因此,即使您使用构造函数创建对象,它们仍然存在。