相关疑难解决方法(0)

没有黑客攻击,私有JavaScript函数无法访问'this'对象?

我正在研究一个项目一段时间,试图找出我做错了什么,当我最终将"错误"缩小到下面的代码不能按预期工作的事实时:

function Alpha()
    {
    this.onion = 'onion';

    function Beta()
        {
        alert(this.onion);
        }

    Beta();
    }

alpha1 = new Alpha();
// Alerts 'undefined'
Run Code Online (Sandbox Code Playgroud)

但是,如果我将代码更改为:

function Alpha()
    {
    var self = this;
    this.onion = 'onion';

    function Beta()
        {
        alert(self.onion);
        }

    Beta();
    }

alpha1 = new Alpha();
// Alerts 'onion'
Run Code Online (Sandbox Code Playgroud)

它像我期望的那样工作.在浪费了我生命中的大部分时间之后,任何人都可以解释为什么它会像这样工作吗?

javascript private this

7
推荐指数
2
解决办法
1312
查看次数

为什么eval无法访问with语句下的作用域变量?

为什么不能evalwith语句下使用范围变量?

例如:

(function (obj) { 
   with (obj) {
      console.log(a); // prints out obj.a
      eval("console.log(a)"); // ReferenceError: a is not defined
   }
})({ a: "hello" })
Run Code Online (Sandbox Code Playgroud)

编辑:正如知识渊博的CMS所指出的,这似乎是一个浏览器错误(使用WebKit控制台的浏览器).

如果有人想知道我试图提出什么憎恶,那将需要"邪恶" evalwith- 我试图看看我是否可以获得一个函数(用作回调)在另一个上下文中执行而不是它被定义为.不,我可能(咳)不会在任何地方使用它...比任何事都更好奇.

(function (context,fn) { 
    with (context) 
       eval("("+fn+")()"); 
})({ a: "hello there" }, function () { console.log(a); })
Run Code Online (Sandbox Code Playgroud)

javascript eval with-statement

7
推荐指数
1
解决办法
1353
查看次数

这个运算符在javascript中

假设我有类似的JavaScript代码

      myClass = function(){
          function doSomething(){
              alert(this); // this1 
          }
      } 
      alert(this); //this2
Run Code Online (Sandbox Code Playgroud)

这两个'这个'对象是指什么?

javascript this

2
推荐指数
1
解决办法
1185
查看次数

这在JavaScript函数中引用了什么?

function Box(width, height)
{
  this.width = width;
  this.height = height;
}

var myBox = new Box(5,5);
Run Code Online (Sandbox Code Playgroud)
  1. 什么是new关键词技术上在这里做什么?它是否正在创建一个新功能?或者是创建一个新对象并将该函数应用于它?

  2. 如果是这样,那么这是一种创建"Box"的方法,这是否意味着this关键字实际上是指对象myBox?

javascript prototype function

2
推荐指数
1
解决办法
1402
查看次数

标签 统计

javascript ×4

this ×2

eval ×1

function ×1

private ×1

prototype ×1

with-statement ×1