var MyObj = function(x) {
this.x = x;
this.y = 5;
};
MyObj.prototype.example = function() {
// I want to return a new object which has access to this.x and this.y
// For example:
return {
addTwo: function() {
// How can I access this.x from the MyObj instance?
return 2 + (x from the instance of MyObj)
}
}
};
如何从示例方法返回对象,以便它可以访问MyObj实例的实例变量?
我不能在返回的对象内使用“ this”,否则它将引用我要返回的对象。
我没有使用es6
答案 0 :(得分:2)
有几个选项-最简单的方法是创建对this
实例的MyObj
的引用,并在对象{{1 }}这样返回:
addTwo()
答案 1 :(得分:2)
您没有说明是否可以使用es6。基本上,这是范围问题。使用es6和babel,您可以执行
之类的操作 body {
margin: 0;
padding: 0;
background: #333;
background-attachment: fixed;
background-size: cover;
}
#video-background {
position: fixed;
right: 0;
bottom: 0;
min-width: 100%;
min-height: 100%;
width: auto;
height: auto;
z-index: -100;
}
article {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border: 10px solid rgba(255, 255, 255, 0.5);
margin: 10px;
}
h1 {
position: absolute;
top: 60%;
width: 100%;
font-size: 36px;
letter-spacing: 3px;
color: #fff;
font-family: Oswald, sans-serif;
text-align: center;
}
h1 span {
font-family: sans-serif;
letter-spacing: 0;
font-weight: 300;
font-size: 16px;
line-height: 24px;
}
h1 span a {
color: #fff;
}
通过这种方式,<!DOCTYPE html>
<html>
<body>
<link href='https://fonts.googleapis.com/css?family=Oswald' rel='stylesheet' type='text/css'>
<video autoplay loop id="video-background" plays-inline>
<source src="video.mp4" type="video/mp4">
</video>
</body>
</html>
不会改变,因为箭头函数具有从外部范围继承的var MyObj = function(x) {
this.x = x;
this.y = 5;
};
MyObj.prototype.example = function() {
// I want to return a new object which has access to this.x and this.y
// For example:
return {
addTwo: () => {
// How can I access this.x from the MyObj instance?
return 2 + this.x
}
}
};
上下文。
供参考 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
基本上可以转换为类似的东西(您没有使用类,所以我假设您没有使用es6)
this
它将只是将this
变量“存储”到其他变量以供以后使用(这就是babel在后台进行的类似操作)。
如果您想第3个答案,可以这样将var MyObj = function(x) {
this.x = x;
this.y = 5;
};
MyObj.prototype.example = function() {
// I want to return a new object which has access to this.x and this.y
var that = this
// For example:
return {
addTwo: function(){
// How can I access this.x from the MyObj instance?
return 2 + that.x
}
}
};
上下文绑定到被调用的函数
this
它将“转移” this
到该功能。
供参考 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind
答案 2 :(得分:0)
如果使用箭头功能,this
上下文在内部将不会更改:
var MyObj = function(x) {
this.x = x;
this.y = 5;
};
MyObj.prototype.example = function() {
return {
addTwo: () => 2 + this.x
}
};
const o = new MyObj(2);
console.log(o.example().addTwo());