jquery中this与$(this)的⽤法区别.和于js中的this区别jquery中this与$(this)的⽤法区别.先看以下代码: $("#textbox").hover( function() { this.title = "Test"; }, fucntion() { this.title = "OK”; } ); 这⾥的this其实是⼀个Html 元素(textbox),textbox有text属性,所以这样写是完全没有什么问题的。但是如果将this换成$(this)就不是那回事了,就会报错了。以下写法是错误的:$("#textbox").hover( function() { $(this).title = "Test"; }, function() { $(this).title = "OK"; } ); 这⾥的$(this)是⼀个JQuery对象,⽽jQuery对象沒有title 属性,因此这样写是错误的。 JQuery拥有attr()⽅法可以get/set DOM对象的属性,所以正确的写法应该是这样:正确的写法: $("#textbox").hover( function() { $(this).attr('title', 'Test'); }, function() { $(this).attr('title', 'OK'); } ); 使⽤JQuery的好处是它包裝了各种浏览器版本对DOM对象的操作,因此统⼀使⽤$(this)⽽不再⽤this应该是⽐较不错的选择。
js中的this
我们要记住:this永远指向函数运⾏时所在的对象!⽽不是函数被创建时所在的对象。
this对象是在运⾏时基于函数的执⾏环境绑定的,在全局环境中,this等于window
先来看个例⼦:
<script>
var fullname = "Trigkit4";
var person = {
fullname : 'Jack',
prop:{
fullname : 'Blizzard',
getFullname : function () {
return this.fullname;
}
}
};
console.log(Fullname());//Blizzard
var test = Fullname;
console.log(test());//Trigkit4
</script>
当getFullname被分配到test变量时,上下⽂指的是全局对象(window)。这是因为test是被隐式设置为全局对象的属性。出于这个原因,该函数返回window的fullname,所以在这⾥this指的是window,所以返回的是第⼀个fullname
说明
this关键字通常在对象的构造函数中使⽤,⽤来引⽤对象。
关键字this:总是指向调⽤该⽅法的对象,如:
var iCar = new Object();
iCar.showColor = function(){
lor);//输出"red"
};
关键字this⽤在对象的showColor()⽅法中,在此环境,this等于iCar
使⽤this是因为在实例化对象时,总是不能确定开发者会使⽤什么样的变量名。使⽤this,即可在任意多个地⽅重⽤同⼀个函数。考虑下⾯的例⼦:
function showColor(){
lor);
}
var oCar1 = new Object;
oCar1.showColor = showColor;
var oCar2 = new Object;
oCar2.showcolor = showcolor;
oCar1.showColor();//输出"red"
oCar2.showColor();//输出"blue"
这段代码中,⾸先⽤this定义函数showColor(),然后创建两个对象oCar1和oCar2,⼀个对象属性被设置为"red",另⼀个为blue;两个对象都被赋予了属性showColor,指向原始的showColor()函数,调⽤每个showColor的⽅法,oCar1输出red,oCar2输出blue。
引⽤对象属性时,必须使⽤this关键字。
所有基于全局作⽤域的变量其实都是window对象的属性(property)。这意味着即使是在全局上下⽂中,this变量也能指向⼀个对象。
对于JScript的客户版本,如果在其他所有对象的上下⽂之外使⽤this,则它指的是window对象。
例如:
<head>
<meta http-equiv="Content-Type"content="text/html;charset=UTF-8" />
<title></title>
<script type="text/javascript">
alert(this);//弹出 object window;
</script>
</head>
<body>
</body>
作为构造函数调⽤
所谓构造函数,就是通过这个函数⽣成⼀个新对象(object)。这时,this就指这个新对象。
<script type="text/javascript">
function test(){
this.x = 10;
}
var obj = new test();
alert(obj.x); //弹出 10;
</script>
全局环境中的this
在看下⾯⼀个this出现在全局环境中的例⼦:
var name = "全局";
function getName(){
var name = "局部";
return this.name;
};
alert(getName());//弹出全局;
</script>
函数getName()所处的对象是window对象,因此this也⼀定在window对象中。此时的this指向window对象,所以getName()返回的this.name其实是window.name,因此alert出全局。
结论:⽆论this⾝处何处,⼀定要到函数运⾏时(或者说在何处被调⽤了)的位置。
通过不同的调⽤语法,改变相同函数内部this的值:
<script type="text/javascript">
var foo = {
test:function(){
alert(this);
}
}
var baz = st;
baz();//window,因为baz()被调⽤时属于global对象
</script>
局部环境中的this
看下⾯⼀个this出现在局部环境中的例⼦
<script type="text/javascript">
var name = "全局";
var jubu={
name:"局部",
getName:function(){
return this.name;
}
};
Name());
</script>
其中this⾝处的函数getName不是在全局环境中,⽽是处在jubu环境中。⽆论this⾝处何处,⼀定要到函数运⾏时的位置。此时函数getName运⾏时的位置:
Name());
显然,函数getName所在的对象是jubu,因此this的安⾝之处定然在jubu,即指向jubu对象,则getName返回的this.name其实
是jubu.name,因此alert出来的是“局部”!
作⽤域链中的this
function scoping () {
console.log(this);
return function () {
console.log(this);
};
}
scoping()();
>>window
>> window
</script>
因为scoping函数属于window对象,⾃然作⽤域链中的函数也属于window对象。
对象中的this
可以在对象的任何⽅法中使⽤this来访问该对象的属性。这与⽤new得到的实例是不⼀样的。
var obj = {
foo: "test",
bar: function () {
console.log(this.foo);
}
};
obj.bar(); // "test"
重写this
⽆法重写this,因为它是⼀个关键字。
function test () {
原生js和js的区别
var this = {};  // Uncaught SyntaxError: Unexpected token this
}
jquery中的this
$()⽣成的是什么呢?实际上$()=jquery(),那么也就是说返回的是⼀个jquery的对象。$(this)是jquery对象,能调⽤jquery的⽅法,例如click(), keyup()。
$(function () {
$('button').click(function () {
alert(this);//this 表⽰原⽣的DOM
//$(this)表⽰当前对象,这⾥指的是button
})
});
结论:
this,表⽰当前的上下⽂对象是⼀个html DOM对象,可以调⽤html对象所拥有的属性,⽅法。$(this),代表的上下⽂对象是⼀个jquery的上下⽂对象,可以调⽤jquery的⽅法和属性值。