在不使用原型的情况下向函数添加属性

卡哈斯

是否可以在不使用原型的情况下向函数添加属性?我知道使用原型您可以执行以下操作:

function Gadget(name, color) { 
    this.name = name; 
    this.color = color; 
    this.whatAreYou = function(){ 
    return 'I am a ' + this.color + ' ' + this.name; 
    }
}

没有原型对象,是否可以实现相同的目标?

jfriend00

您的要求有点混乱。您目前没有为方法或属性使用原型(无法从问题中得知您是否意识到了这一点),并且如果您使用如下方法从函数中创建对象,则该技术可以正常工作new

function Gadget(name, color) { 
    this.name = name; 
    this.color = color; 
    this.whatAreYou = function(){ 
        return 'I am a ' + this.color + ' ' + this.name; 
    }
}

var x = new Gadget("Faucet", "red");
x.whatAreYou();   // returns 'I am a red Faucet'

工作演示:http : //jsfiddle.net/jfriend00/wPP7N/

使用new运算符时,它将创建一个新对象并调用this分配给该新对象的函数您添加到对象中this指向构造函数的所有属性都将成为新对象的属性。

事实上,像一个动态值的属性name,并color在你的例子经常这样分配的构造函数有一点优势,使用的原型,因为他们会被分配一个动态值。whatAreYou使用原型分配诸如您的方法之类的方法具有性能优势,因为在构造函数时只需运行较少的代码-尽管相差不大。


为了进行比较和对比,使用原型定义该方法的代码如下所示:

function Gadget(name, color) { 
    this.name = name; 
    this.color = color; 
}

Gadget.prototype.whatAreYou = function(){ 
    return 'I am a ' + this.color + ' ' + this.name; 
}

var x = new Gadget("Faucet", "red");
x.whatAreYou();   // returns 'I am a red Faucet'

如果只是简单地调用该函数,例如:

Gadget();

然后,不会创建新对象,并且this将指向全局对象或将其指向undefined(在严格模式下),因此这些属性将不在特定于Gadget的对象上。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在不使用导航属性的情况下添加相关实体

来自分类Dev

在不使用cocoapods的情况下向现有项目添加框架

来自分类Dev

如何在不使用Blob的情况下向多部分请求添加内容类型

来自分类Dev

我如何在不使用item选项的情况下向Magnific Popup添加长说明?

来自分类Dev

如何在不使用设计器的情况下向Infragistics UltraGrid添加列

来自分类Dev

在不使用填充的情况下向材料UI网格添加空白列

来自分类Dev

我如何在不使用item选项的情况下向Magnific Popup添加长说明?

来自分类Dev

如何在不使用指南针的情况下向胸部添加怀疑?

来自分类Dev

如何在不使用内联的情况下向管理员添加字段?

来自分类Dev

用于在不使用unshift方法的情况下将项目添加到数组开头的函数

来自分类Dev

如何在不使用全局变量的情况下从函数中添加2个列表?

来自分类Dev

在不使用“SUM”函数的情况下添加 R 中向量中的每个元素

来自分类Dev

在我的情况下,如何向根XML添加属性?

来自分类Dev

在不使用扫描的情况下验证DynamoDB中的属性?

来自分类Dev

在不使用扫描的情况下验证DynamoDB中的属性?

来自分类Dev

在不使用on()的情况下删除动态添加的元素

来自分类Dev

如何在不使用任何html标记的情况下向html文本添加换行符

来自分类Dev

有没有办法在不使用 codesmith 的情况下向 NetTiers 模型添加新列?

来自分类Dev

使此代码在不使用匿名函数的情况下运行

来自分类Dev

是否可以在不使用“ new”关键字的情况下使用Javascript原型?

来自分类Dev

Glimmer.js如何在不使用构造函数的情况下将跟踪的属性重置为初始值

来自分类Dev

在不创建对象实例的情况下访问原型属性

来自分类Dev

我们可以在不使用 Firebase 的情况下向全球发送通知吗?

来自分类Dev

在不使用./的情况下运行命令

来自分类Dev

是否可以在不使用属性名称的情况下获取属性的PropertyInfo?

来自分类Dev

如何在不使用 Javascript 或 jQuery 添加属性的情况下将对象的属性复制到另一个对象中?

来自分类Dev

如何在函数的参数中不使用类型的情况下指定函数的类型?

来自分类Dev

如何在不使用静态函数的情况下重写此高阶函数?

来自分类Dev

如何在不影响性能的情况下向函数添加详细的日志记录代码?

Related 相关文章

  1. 1

    在不使用导航属性的情况下添加相关实体

  2. 2

    在不使用cocoapods的情况下向现有项目添加框架

  3. 3

    如何在不使用Blob的情况下向多部分请求添加内容类型

  4. 4

    我如何在不使用item选项的情况下向Magnific Popup添加长说明?

  5. 5

    如何在不使用设计器的情况下向Infragistics UltraGrid添加列

  6. 6

    在不使用填充的情况下向材料UI网格添加空白列

  7. 7

    我如何在不使用item选项的情况下向Magnific Popup添加长说明?

  8. 8

    如何在不使用指南针的情况下向胸部添加怀疑?

  9. 9

    如何在不使用内联的情况下向管理员添加字段?

  10. 10

    用于在不使用unshift方法的情况下将项目添加到数组开头的函数

  11. 11

    如何在不使用全局变量的情况下从函数中添加2个列表?

  12. 12

    在不使用“SUM”函数的情况下添加 R 中向量中的每个元素

  13. 13

    在我的情况下,如何向根XML添加属性?

  14. 14

    在不使用扫描的情况下验证DynamoDB中的属性?

  15. 15

    在不使用扫描的情况下验证DynamoDB中的属性?

  16. 16

    在不使用on()的情况下删除动态添加的元素

  17. 17

    如何在不使用任何html标记的情况下向html文本添加换行符

  18. 18

    有没有办法在不使用 codesmith 的情况下向 NetTiers 模型添加新列?

  19. 19

    使此代码在不使用匿名函数的情况下运行

  20. 20

    是否可以在不使用“ new”关键字的情况下使用Javascript原型?

  21. 21

    Glimmer.js如何在不使用构造函数的情况下将跟踪的属性重置为初始值

  22. 22

    在不创建对象实例的情况下访问原型属性

  23. 23

    我们可以在不使用 Firebase 的情况下向全球发送通知吗?

  24. 24

    在不使用./的情况下运行命令

  25. 25

    是否可以在不使用属性名称的情况下获取属性的PropertyInfo?

  26. 26

    如何在不使用 Javascript 或 jQuery 添加属性的情况下将对象的属性复制到另一个对象中?

  27. 27

    如何在函数的参数中不使用类型的情况下指定函数的类型?

  28. 28

    如何在不使用静态函数的情况下重写此高阶函数?

  29. 29

    如何在不影响性能的情况下向函数添加详细的日志记录代码?

热门标签

归档