揭示原型“此”上下文

弗拉特

我正在尝试通过下面的示例在jsfiddle中演示“揭示原型模式”;但是,警报始终显示“未定义”,而不是我在准备好文档时创建的对象实例中提供的值。我从Dan Wahlin的博客提供的示例中获取了此信息,但似乎无法弄清为什么id的值未定义。我认为这与“此”更改的上下文有关,但不确定如何?谢谢。

foo = window.foo || {}
foo.User = function(id){
    this.id = id;
    this.name = "Bob";    
};
foo.User.prototype = function(){
    var showUser = function(thisObj){alert(thisObj.id);};
    var showUserPublic = function(){showUser(this);};
    return{
            showUser : showUserPublic()   
    };
}();



$(function(){
    var newUser = new foo.User("bob123");
    newUser.showUser();
});
TJ人群

showUser : showUserPublic() 调用 showUserPublic并将其返回值(undefined分配给属性showUser如果要在原型上公开showUserPublicshowUser方法,只需使用不带()以下名称的函数名

return{
        showUser : showUserPublic
};

当您的newUser.showUser();线路this调用该对象时将在调用过程中将其作为用户对象showUserPublic,并将其showUser作为参数传递给(我不知道您为什么如此间接地这样做,但我希望您确实有理由。)


边注:

我建议不要替换默认prototype对象,而应增加它。这避免了与计时相关的陷阱。这是一个小变化:

(function(p){
    var showUser = function(thisObj){alert(thisObj.id);};
    p.showUser = function(){showUser(this);};
}(foo.User.prototype);

旁注2:

另外,代码似乎没有声明,而是依赖于《隐式全球性恐怖》foo您可以将第一行更改为:

var foo = foo || {};

工作原理:

由于可怜,被误解了var,实际上可以归结为:

var foo;
foo = foo || {};

如果已经有一个声明的变量称为foo,则该var foo位为无操作;否则为0。它绝对没有影响(特别是对的当前值没有影响foo)。然后,下一行很简单:如果foo为false,{}则将其分配给它。


将旁注与主要答案放在一起:

var foo = foo || {}
foo.User = function(id){
    this.id = id;
    this.name = "Bob";    
};
(function(p){
    var showUser = function(thisObj){alert(thisObj.id);};
    p.showUser = function(){showUser(this);};
}(foo.User.prototype);


$(function(){
    var newUser = new foo.User("bob123");
    newUser.showUser();
});

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

揭示原型“此”上下文

来自分类Dev

jQuery“此”上下文

来自分类Dev

执行上下文和((此对象))

来自分类Dev

此上下文的正确请求类型?

来自分类Dev

在原型回调期间上下文丢失

来自分类Dev

使用绑定强制原型函数的上下文

来自分类Dev

在原型上下文中更改“ this”以替换功能主体

来自分类Dev

从原型函数JavaScript访问对象上下文

来自分类Dev

使用Hilt注入上下文:此字段泄漏上下文对象

来自分类Dev

isGooglePlayServicesAvailable的上下文(上下文上下文)

来自分类Dev

JS对象文字,此上下文不断变化

来自分类Dev

传递成员时在JavaScript中丢失“此”上下文

来自分类Dev

Javascript&jQuery-了解“此”上下文-意外“”。期

来自分类Dev

forEach函数调用的调用上下文(此)

来自分类Dev

此上下文是什么意思:(Monad m,(〜)* a())?

来自分类Dev

XML模式-“此上下文不支持元素”

来自分类Dev

在覆盖的函数中获取正确的此上下文

来自分类Dev

打字稿装饰器和此上下文

来自分类Dev

Javascript Google Maps api addDomListener更改此上下文

来自分类Dev

此上下文中不存在名称“userAge”

来自分类Dev

反应-上下文

来自分类Dev

在原型中进行事件绑定是否明智?为什么会丢失上下文?

来自分类Dev

使用require设置原型自动执行功能时的Browserify上下文

来自分类Dev

对于原型ajax,使用上下文的等效条件是什么?

来自分类Dev

节点js原型对象'self'变量未存储正确的回调上下文

来自分类Dev

JavaScript-具有正确“ this”上下文的原型上的链接属性

来自分类Dev

将词法上下文保留在类型的原型中

来自分类Dev

上下文代理:注销上下文

来自分类Dev

上下文菜单MenuItem单击“数据上下文”?

Related 相关文章

  1. 1

    揭示原型“此”上下文

  2. 2

    jQuery“此”上下文

  3. 3

    执行上下文和((此对象))

  4. 4

    此上下文的正确请求类型?

  5. 5

    在原型回调期间上下文丢失

  6. 6

    使用绑定强制原型函数的上下文

  7. 7

    在原型上下文中更改“ this”以替换功能主体

  8. 8

    从原型函数JavaScript访问对象上下文

  9. 9

    使用Hilt注入上下文:此字段泄漏上下文对象

  10. 10

    isGooglePlayServicesAvailable的上下文(上下文上下文)

  11. 11

    JS对象文字,此上下文不断变化

  12. 12

    传递成员时在JavaScript中丢失“此”上下文

  13. 13

    Javascript&jQuery-了解“此”上下文-意外“”。期

  14. 14

    forEach函数调用的调用上下文(此)

  15. 15

    此上下文是什么意思:(Monad m,(〜)* a())?

  16. 16

    XML模式-“此上下文不支持元素”

  17. 17

    在覆盖的函数中获取正确的此上下文

  18. 18

    打字稿装饰器和此上下文

  19. 19

    Javascript Google Maps api addDomListener更改此上下文

  20. 20

    此上下文中不存在名称“userAge”

  21. 21

    反应-上下文

  22. 22

    在原型中进行事件绑定是否明智?为什么会丢失上下文?

  23. 23

    使用require设置原型自动执行功能时的Browserify上下文

  24. 24

    对于原型ajax,使用上下文的等效条件是什么?

  25. 25

    节点js原型对象'self'变量未存储正确的回调上下文

  26. 26

    JavaScript-具有正确“ this”上下文的原型上的链接属性

  27. 27

    将词法上下文保留在类型的原型中

  28. 28

    上下文代理:注销上下文

  29. 29

    上下文菜单MenuItem单击“数据上下文”?

热门标签

归档