【问题标题】:Why do people use the prototype property? [duplicate]人们为什么要使用原型属性? [复制]
【发布时间】:2014-06-17 07:19:10
【问题描述】:

我试图弄清楚使用原型属性的价值是什么。我一直在看的一个教程将原型属性定义如下:“原型属性允许您向对象添加属性和方法。”所以我想象,给定这个定义,如果我不使用它,我将不被允许向对象添加属性和方法..该网站以此为例:

function employee(name,jobtitle,born)
{
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
}

var fred=new employee("Fred Flintstone","Caveman",1970);
employee.prototype.salary=null;
fred.salary=20000;

document.write(fred.salary);

所以我在浏览器中运行了这个,是的,fred.salary 确实等于 20000。我决定试验一下,看看如果我删除这一行会发生什么:

employee.prototype.salary=null;

我以为我会出错。我想这可能是必要的,因为它“允许”我向对象“添加”属性和方法的定义。我试过这个:

function employee(name,jobtitle,born)
{
this.name=name;
this.jobtitle=jobtitle;
this.born=born;
}

var fred=new employee("Fred Flintstone","Caveman",1970);
fred.salary=20000;

document.write(fred.salary);

但是,令我惊讶的是没有错误。代码工作完全一样,就好像我根本没有做任何更改一样。就好像这一行:

employee.prototype.salary=null;

完全没有意义。现在我很想知道......如果原型属性似乎没有做任何事情,我为什么要使用它?

【问题讨论】:

  • 本教程似乎措辞不佳(或根本错误)。原型提供对象将使用的属性值,如果它没有自己的值覆盖这些值。这就是 Javascript 的继承方式。
  • 谢谢。我会尝试从另一个教程中了解原型属性。
  • 如果您将值直接分配给实例成员的阴影,则此处解释了这一点以及更多内容:stackoverflow.com/questions/16063394/…

标签: javascript


【解决方案1】:

我认为你对这条线感到困惑:

employee.prototype.salary=null;

..你认为你正在定义一个名为薪水的变量。是的,您正在定义一个名为salary 的变量,但是这一行:

fred.salary=20000;

..还定义了一个名为salary 的变量。

但是,如果您创建了一些其他人对象:

var fred=new employee("Fred Flintstone","Caveman",1970);
var jane=new employee(...);
var bob=new employee(...);

然后确实在原型上更改了薪水..

employee.prototype.salary=30000;
fred.salary=20000;

那么 fred.salary 将是 20000,但 bob 和 jane 将是 30000

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-20
    • 2011-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多