javascript - this 与 Javascript 原型(prototype)

标签 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 ,它的行为方式与原型(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/

相关文章:

javascript - 配对锦标赛设计算法

javascript - 带有我的 JQuery 函数的正则表达式用于 sql 变量名称验证

javascript - 当选项卡更改 URL 或重新加载时使用 chrome.tabs.executeScript

javascript - Codeigniter JQuery 在 jquery .get 请求后动态加载 View 中的数据

c++ - 通过指针访问数组

c# - 使用接口(interface)有什么好处?

javascript - 跟踪像素可以从远程服务器执行 javascript 吗?

java - 从接口(interface)实现方法但具有不同的参数

c++ - 使用STL算法合并大量容器

oop - 当我们尝试通过继承重用代码时如何解决并行继承层次结构