Javascript - 具有新关键字的函数构造函数

时间:2016-09-01 08:48:14

标签: javascript constructor

当使用// 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会正确打印返回的对象。

3 个答案:

答案 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是否有栏属性。