首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.prototype的简单场景

使用.prototype的简单场景
EN

Stack Overflow用户
提问于 2011-01-21 15:40:35
回答 2查看 233关注 0票数 3

2个问题:

  1. 下面,代码A和代码B会有相同的结果吗?

阅读@Box9 9的答案后添加:代码A与代码C的区别如何?

  1. 什么是简单、实用、直观的编码场景,其中代码A是首选技术?

代码A:使用.prototype

代码语言:javascript
复制
function employee(name,jobtitle,born)
{
    this.name=name;
    this.jobtitle=jobtitle;
    this.born=born;
}

employee.prototype.salary=null;

代码B:没有.prototype

代码语言:javascript
复制
function employee(name,jobtitle,born)
{
    this.name=name;
    this.jobtitle=jobtitle;
    this.born=born;

    employee.salary=null;
}

代码C:使用.prototype,里面什么都没有

代码语言:javascript
复制
    function employee(){}

employee.prototype.name=null;    
employee.prototype.jobtitle=null;
employee.prototype.born=null;
employee.prototype.salary=null;

提前道歉,我意识到在.prototype和许多网络教程上还有其他这样的问题,然而这些解释似乎过于简单,或者只是在技术上超出了我的头脑。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-21 16:07:33

在您的示例中,代码A是正确的,而代码B则不是。

为了解释,我们可以从三个不同的方面来考虑employee

  1. A“标准”雇员-所有新员工共有的默认值集。这是我们创造新员工的模式。新雇员的工资从零开始。
    • 这是prototype

  1. A“特殊”雇员-说,约翰。起初,他的起薪为零(来自“标准”雇员),但随后他可以获得自己的工资。他也有自己的名字,职称和生日,这些都是他独有的。
    • 唯一的属性是使用关键字thisemployee()函数中分配的。

  1. 员工作为一个组-不为每个员工存储的值,而是为所有员工同时存储的值,例如,所有员工都来自A公司
    • 这是直接在函数employee上设置一个属性。

现在回到您的两个代码示例,

代码A中的employee.prototype.salary = null是正确的,因为它正在为“标准”员工设置起薪。

代码B中的employee.salary = null是不正确的,因为它将所有员工的薪资设置为一个组--也就是说,它不仅仅是一个默认值,而是所有员工的单一总括值。这段代码在employee()函数中并不重要--该函数唯一的不同之处在于它允许您使用this关键字来引用当前由于调用new employee()而构建的“特定”雇员。

票数 3
EN

Stack Overflow用户

发布于 2011-01-21 16:08:58

第一,守则A和B会有不同的结果。代码A有一个对象的构造函数,并将一个属性添加到其原型中。这意味着employee的所有实例都有一个名为salary的字段,该字段为null。与prototype属性的正常行为一样,如果这些实例中的任何一个写入属性,它将为对象创建一个本地副本。

因此,使用代码A:

代码语言:javascript
复制
var e = new employee('Bob', 'janitor', 1978);
alert(e.salary);  // null

var f = new employee('Alice', 'teacher', 1976);
f.salary = 20000;

alert(f.salary);  // 20000
alert(e.salary);  // null

在代码B中,没有一个employee实例将工资作为属性,但是构造函数(例如,employee.salary )将存在,并且更像是经典继承中的静态类变量。如果希望为所有实例(例如employee.RETIREMENT_AGE = 65 )提供一个可用的值,则可以这样做,但通常在构造函数之后才这样做,而不是在构造函数中(重复分配相同的东西)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4760658

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档