例如,假设我在浏览器的全局窗口中定义了以下Constructor函数。
function AccessProperty() {
this.myName = "Chris";
}
现在,我像这样执行此功能:
new AccessProperty();
现在,根据我如何使用new关键字执行上述函数,如何在不添加以下内容的情况下访问this.myName
属性:
var acccess = new AccessProperty();
答案 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函数的范围绑定到父函数的范围。完成后,名称将在父函数的范围内