如何基于此javascript代码访问此属性?

时间:2018-09-24 23:01:55

标签: javascript

例如,假设我在浏览器的全局窗口中定义了以下Constructor函数。

function AccessProperty() {
  this.myName = "Chris";
}

现在,我像这样执行此功能:

new AccessProperty();

现在,根据我如何使用new关键字执行上述函数,如何在不添加以下内容的情况下访问this.myName属性:

var acccess = new AccessProperty();

3 个答案:

答案 0 :(得分:3)

您可以像这样直接访问它:

acccess.myName

或使用方括号:

acccess['myName']

不使用new运算符

如果不使用new运算符调用该函数,则该属性将在页面的window对象中设置。不建议这样做,但是您可以这样做:

AccessProperty();
console.log(window.myName);

另一种可能性是返回这样的新对象:

function AccessProperty() {
    return { myName: "Chris" };
}
var o = AccessProperty(); // not using 'new'
console.log(o.myName);

答案 1 :(得分:1)

目前还不清楚您的最终目标是什么。 this是根据函数上下文而变化的上下文引用。当您使用new时,this指的是js系统为您创建并返回给调用者的对象。如果没有new,则只需调用该函数即可成为全局窗口。

您可以使用this之类的函数来明确告诉函数call()是什么:

function AccessProperty() {
    this.myName = "Chris";
  }

let someObject = {}
AccessProperty.call(someObject)   // this will be someObject
console.log(someObject.myName)    // to which the function adds myName.

但是,当您仅可以使用new并获得具有myName属性的对象时,这似乎是做某事的困难方法。

为演示this的动态性质,请考虑以下代码:

function AccessProperty() {
  this.myName = "Chris";
}

let o = {
  set: AccessProperty,
  talk() {console.log(this.myName)}
}
// because of the way it's called `this` in
// the function AccessProperty will be
// the object o 
o.set()   
o.talk()
console.log(o) // o now has a myName property

在某些情况下,此行为非常有用,如果您不希望您使用this,则可以定义变量。

答案 2 :(得分:0)

如果您不处于严格模式,则可以执行以下操作

function AccessProperty(){
 this.name="ram"
}

function parent(){
  AccessProperty.bind(this)
  AccessProperty()
  console.log(this.name)
}


parent()

在这里,我们已将AccessProperty函数的范围绑定到父函数的范围。完成后,名称将在父函数的范围内