jquery中this与$(this)的用法区别.和于js中的this区别
2015-05-25 11:40
399 查看
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应该是比较不错的选择。
我们要记住:
先来看个例子:
当
所以返回的是第一个
关键字
关键字
使用
这段代码中,首先用
引用对象属性时,必须使用
所有基于全局作用域的变量其实都是
对于
例如:
所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,
在看下面一个
函数
结论:无论
通过不同的调用语法,改变相同函数内部
看下面一个
其中
显然,函数
因为
可以在对象的任何方法中使用
无法重写
结论:
但是如果将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(person.prop.getFullname());//Blizzard var test = person.prop.getFullname; console.log(test());//Trigkit4 </script>
当
getFullname被分配到
test变量时,上下文指的是全局对象
(window)。这是因为
test是被隐式设置为全局对象的属性。出于这个原因,该函数返回
window的
fullname,所以在这里
this指的是
window,
所以返回的是第一个
fullname
说明
this关键字通常在对象的 构造函数中使用,用来引用对象。
关键字
this:总是指向调用该方法的对象,如:
var iCar = new Object(); iCar.color = "red"; iCar.showColor = function(){ alert(this.color);//输出"red" };
关键字
this用在对象的
showColor()方法中,在此环境,
this等于
iCar
使用
this是因为在实例化对象时,总是不能确定开发者会使用什么样的变量名。使用
this,即可在任意多个地方重用同一个函数。考虑下面的例子:
function showColor(){ alert(this.color); } var oCar1 = new Object; oCar1.color = "red"; oCar1.showColor = showColor; var oCar2 = new Object; oCar2.color = "blue"; 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出现在全局环境中的例子:
<script type="text/javascript"> 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); } } foo.test();//object,因为test方法在调用时属于foo对象 var baz = foo.test; baz();//window,因为baz()被调用时属于global对象 </script>
局部环境中的this
看下面一个this出现在局部环境中的例子
<script type="text/javascript"> var name = "全局"; var jubu={ name:"局部", getName:function(){ return this.name; } }; alert(jubu.getName()); </script>
其中
this身处的函数
getName不是在全局环境中,而是处在jubu环境中。无论
this身处何处,一定要找到函数运行时的位置。此时函数
getName运行时的位置:
alert(jubu.getName());
显然,函数
getName所在的对象是
jubu,因此
this的安身之处定然在
jubu,即指向
jubu对象,则
getName返回的
this.name其实是
jubu.name,因此
alert出来的是“局部”!
作用域链中的this
<script type="text/javascript"> 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 () { 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的方法和属性值。
相关文章推荐
- jquery中this与$(this)的用法区别.和于js中的this区别
- jquery中this与$(this)的用法区别.和于js中的this区别
- jquery中this与$(this)的用法区别.和于js中的this区别
- jquery中this与$(this)的用法区别.和于js中的this区别
- jquery中this与$(this)的用法区别.
- 史上最全的CSS hack方式一览 jQuery 图片轮播的代码分离 JQuery中的动画 C#中Trim()、TrimStart()、TrimEnd()的用法 marquee 标签的使用详情 js鼠标事件 js添加遮罩层 页面上通过地址栏传值时出现乱码的两种解决方法 ref和out的区别在c#中 总结
- JQuery之append和appendTo的区别,还有js中的appendChild用法
- jquery中的$(this)和js的document.getElementById(this)的区别
- js原生ajax与jquery的ajax的用法区别
- jquery中this与$(this)的用法区别
- JQuery之append和appendTo的区别,还有js中的appendChild用法
- jquery中this与$(this)的用法区别.
- Javascript的this用法及jQuery中$this和$(this)的区别
- JQuery之append和appendTo的区别,还有js中的appendChild用法
- C#中??和?分别是什么意思? 在ASP.NET开发中一些单词的标准缩写 C#SESSION丢失问题的解决办法 在C#中INTERFACE与ABSTRACT CLASS的区别 SQL命令语句小技巧 JQUERY判断CHECKBOX是否选中三种方法 JS中!=、==、!==、===的用法和区别 在对象比较中,对象相等和对象一致分别指的是什么?
- jquery中this与$(this)的用法区别.
- JQuery之append和appendTo的区别,还有js中的appendChild用法
- jquery中this与$(this)的用法区别.
- jquery中this与$(this)的用法区别
- JQuery之append和appendTo的区别,还有js中的appendChild用法