当使用// JavaScript
data: $(myform).serializeArray()
// Controller
public class NameValueModel
{
public string Name { get; set; }
public string Value { get; set; }
}
public ActionResult Angus(NameValueModel[] form)
{
// do something
}
调用以下foo
函数时,它将变为构造函数,返回分配给new
的对象。
baz
问题是为什么控制台语句中的function foo() {
this.baz = "baz";
console.log(`${this.bar} ${baz}`);
}
var bar = "bar";
var baz = new foo(); // prints undefined undefined
得到baz
值 - 当undefined
被提升时,当调用新的foo()时,它是正确的,直到函数返回baz
未分配返回的对象?
baz
会正确打印返回的对象。
答案 0 :(得分:2)
在该功能中,bar
中没有this
。您需要删除this
的{{1}}部分。对于this.bar
,您必须使用baz
,因为它已附加到对象实例。
this.baz

此代码表示
function foo() {
this.baz = "baz";
console.log(`${bar} ${this.baz}`);
}
var bar = "bar";
var baz = new foo();
当你创建一个对象时,它只有
其中this.baz = "baz";
console.log(`${this.bar} ${baz}`);
。在正文中,如果要访问对象的属性,则需要通过baz
进行访问。 this
未定义,因为没有${baz}
变量(它不会查看baz
)。因此,如果您需要访问函数中的this
,则需要使用baz
。
this.baz
怎么样,${this.bar}
中没有bar
属性,只有this
。
答案 1 :(得分:1)
在执行构造函数时,变量baz
不存在。在构造函数执行后创建baz
。
如果您使用IIFE,它的工作方式类似:
var test = (function() {
console.log(test) // undefined
return 'test'
}())
console.log(test) // 'test'
答案 2 :(得分:0)
MDN link将帮助您了解this
的含义。
在函数内部使用,它指的是当前对象。那是什么 实际上是指通过你调用它的方式来指定 功能。如果您使用点表示法或括号表示法调用它 一个对象,该对象成为这个。如果没有使用点符号 调用,这是指全局对象。
所以你在this.bar
内呼叫function foo()
。您将获得undefined
因为函数foo()没有bar
属性。
此外,当您在bar
内拨打function foo ()
时,它会开始查找栏属性。
首先在function foo ()
内,然后搜索global
是否有栏属性。