我正在学习javascript并尝试理解为什么javascript使用this.vanilla
。
这与写作相同:
var SomeVariable = [1, "bean", vanilla ? vanilla : "Madagascar Bourbon"];
使用与参数vanilla
相同的名称似乎很混乱。
var VanillaBean = function(vanilla, cinnamon) {
this.vanilla = [1, "bean", vanilla ? vanilla : "Madagascar Bourbon"];
}
答案 0 :(得分:0)
此处VanillaBean
是一个接受两个名为vanilla
和cinnamon
的参数的函数。它会在调用时创建一个至少有一个属性vanilla
的对象:
var flavour = new VanillaBean("cheap", 250);
flavour.vanilla
将为[1, "bean", "cheap"]
。
(谢谢@FelixKling和@ t.niese。)
this
指的是它创建的对象,而不是其他任何其他vanilla
属性。
如果您要使用涉及SomeVariable
的第一个版本,您仍会获得一个列表,但它只是一个独立变量,而不是任何对象的属性(好吧,window
,可能,但是...)
答案 1 :(得分:0)
var a = {};
对象中的 this
:
a.test = function () { return this; };
在这种情况下,this
将为a
,因为function
是a的成员。
a.t = function () {
var b = function () { return this; };
b();
};
在这种情况下,b
不是this
为window
的任何成员。
要理解this
,只需检查自己的功能是谁,如果没有任何所有者,则代表窗口。没有所有者的每个功能都由窗口自动拥有。
您可以暂时更改所有者来电。
var b = function () {};
var c = { d: 1 };
b.call(c);
通话功能暂时将所有者更改为c
,this
为c
。
创建新实例。
function E() { this.h = 2; }
E.prototype = { f: 1 };
E.prototype.g = function () { return this; };
var e = new E();
e.g();
在这种情况下,this
为e
。 prototype
是一种结构,可让您描述新对象最初的样子。这将是{ h: 2, g: func, f: 1 }
。
答案 2 :(得分:0)
在html元素中使用时,this
指的是DOM中的元素。
示例:
<script type="text/javascript">
function hover(domElement) {
domElement.style.backgroundColor = '#CCC';
}
</script>
<div onmouseover="hover(this);">Hover me</div>
当在非返回函数中使用this
时,该函数变为对象构造函数,this
引用隐式创建的对象,该函数在使用{{调用函数时自动返回1}}。
示例:
new
没有function Point(x, y) {
this.x = x || 0;
this.y = y || 0;
this.distance = function (point) {
return Math.sqrt(
Math.pow(point.x - this.x, 2) +
Math.pow(point.y - this.y, 2)
);
};
}
var a = new Point(10, 10);
var b = new Point(100, 100);
document.write(a.distance(b));
和this
的相同功能:
new