【问题标题】:Using server-side javascript in classic asp: what's wrong with "this"?在经典 asp 中使用服务器端 javascript:“this”有什么问题?
【发布时间】:2011-03-24 00:35:39
【问题描述】:

类似:Inserting objects into global scope in classic ASP / Javascript


尝试开始在经典 ASP 中使用 javascript。不过,这似乎有些“陷阱”:有这方面经验的任何人都可以告诉我“Blah2”代码是怎么回事吗?似乎它“应该”工作,但我使用“this”似乎有问题......

<script language="javascript" runat="server">

 var Blah = {};
 Blah.w = function(s){Response.write(s);}

 Blah.w('hello'); //this works...


 var Blah2 = function(){
     this.w = function(s){Response.write(s);} 
     //line above gives 'Object doesn't support this property or method'
     return this;
 }();

 Blah2.w('hello');

</script>

感谢大家的指点

提姆

【问题讨论】:

  • @Sebastian:经典 ASP 允许您在服务器端使用 VBScript 或 JavaScript。
  • 您可能已经意识到这一点,但不管您信不信,有些人不知道 - 除非您别无选择,否则不应使用“经典”ASP。
  • @John:是的,我知道现在我应该跟上 asp.net 的速度了(毕竟,此时它至少有 10 年的历史了)。但是,我对经典的 ASP 非常熟悉,有一个快速的项目要推出,并且认为我至少会尝试通过从服务器端 vbscript 切换到 j(ava)script 来学习新的(旧的?)复习一点 JSON。
  • @Joel:我真的在使用经典的 ASP。经典 ASP 也使用 runat=server...
  • 有趣的是有多少人坚持经典 ASP 不能在服务器端运行 javascript...

标签: javascript asp-classic jscript


【解决方案1】:

你的函数需要括号

var Blah2 = (function(){
    this.w = function(s){Response.write(s);} 
    //line above gives 'Object doesn't support this property or method'
    return this;
}());

另外,this.w 没有做你想做的事。 this 实际上指向那里的全局对象。你想要:

var Blah2 = (function(){
    return {w : function(s){ Response.write(s); }};
}());

或者

bar Blah2 = new (function(){
   ...

【讨论】:

  • 如果我错了,请其他人加入并纠正我,但我很确定我使用的上下文中的“this”指的是函数 Blah2,而不是全局对象。 . 至少,这就是它在浏览器中的工作方式:我不清楚的是为什么它在这种情况下不起作用。除非您特别指出 在服务器端 ASP 中,否则它会按照您的描述工作?
  • 不,除非您使用new 创建一个对象。如果您不相信我,请在任何浏览器中运行:function blah(){ alert(this === window); } blah()。函数调用本身并没有设置this
  • 我应该补充一点,您的第二个示例(类似于我的第一个示例)确实有效。我真的只是想找出为什么“this”在这种情况下似乎是一个问题。
  • 感谢您的纠正:我刚刚阅读了另一个解决此问题的 SO 问题,然后回到这里吃我的话。
  • javascript 区分大小写,伙计们!在混合 vbscript 和 javascript 服务器端时不要忘记这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多