Object 角度指令中的对象初始化与控制器中的对象初始化不同?

Object 角度指令中的对象初始化与控制器中的对象初始化不同?,object,angularjs,controller,initialization,directive,Object,Angularjs,Controller,Initialization,Directive,我遇到了一个问题,对象初始化不同,代码是在控制器中还是在指令链接函数中。在下面的示例代码中,在 prop: new Object(this) 当代码在控制器中运行时是合法的对象构造函数,但在指令中运行时是未定义的。为什么相同代码的执行会有差异 myapp.directive("myDir",function() { var myDir = { link: function(scope,element,attrs) { var obj; obj

我遇到了一个问题,对象初始化不同,代码是在控制器中还是在指令链接函数中。在下面的示例代码中,在

prop: new Object(this)   
当代码在控制器中运行时是合法的对象构造函数,但在指令中运行时是未定义的。为什么相同代码的执行会有差异

myapp.directive("myDir",function()
{
  var myDir = {
    link: function(scope,element,attrs)
    {
      var obj;

      obj = new Object({
        prop: new Object(this)
      });
    }
  }

  return myDir;
}


myapp.controller("MyCtrl",function($scope)
{
  var obj;

  obj = new Object({
    prop: new Object(this)
  });
}
我认为你在声明中使用“this”是个问题。仔细阅读,确保你了解它是如何工作的


在我看来,“this”可能会被设置为指令中的“myDir”变量,以及控制器中的窗口对象。

no,“this”在包含对象的范围内,即“obj”变量。如前所述,“this”在指令中未定义,是控制器中的预期对象。即使我将“this”更改为“obj”,结果也是一样的。“this”仅在对象的成员函数中赋值。。。而不是在对象本身内部。当然,当您将“this”更改为“obj”时,它仍然会失败。。在构造函数完成之前,“obj”是空的,所以您只需要传递一个null。不,在这两种情况下,“obj”都不是空的。它在指令中未定义,在控制器中有效。对,不为null。在构造函数中传递时,在任何一种情况下都是“未定义”。我不是说构造函数返回后的最终值。根本没有办法将对对象的引用传递给该对象的构造函数。重新设计您的系统。