首页 新闻 会员 周边 捐助

jquery 链式 对象转换 继承

0
悬赏园豆:40 [已解决问题] 解决于 2014-06-23 10:50
$(function(){console.log($("a").html())

//上面是jquery的
//下面是我模拟的
;(
function(win,fn){fn(win)}(window,function(win){ var G= function(filter) { return new G.fn.init(filter); } G.fn =G.prototype = {    sayHello: function(a) { console.log("G"+a);return G(a)}     }; window.G=G; var init = G.fn.init=function(filter){}; init.prototype=G.prototype; })); console.log(G(2).sayHello(3).sayHello(4).sayHello(5));

 jq 不是返回的jquery对象吗 
为啥 我的log 和 jq 的log 结果 不一样
 求大神指点 
王那个锋啊的主页 王那个锋啊 | 菜鸟二级 | 园豆:311
提问于:2014-06-21 00:15
< >
分享
最佳答案
1

看了半天才反应过来,原因是因为$("a").html()返回的不是jquery对象,而是字符串,log输出当然就是字符串了。而你模拟的返回值一直是一个对象,只不过内部log输出了字符串。

同样的还有width(),height(),scrollTop()等方法返回值都不是jquery对象,也就不能链式调用了

注:你上面的js代码和下面的输出结果不对应,让我看了半天

修改:上面三个方法如果是读取数据,返回值就是字符串或者数字,如果是赋值数据,那么返回值还是jquery对象,而且就是自己本身

收获园豆:40
ThreeTree | 小虾三级 |园豆:1490 | 2014-06-21 01:02

不对吧,那比如$("a").ecah(function)
前半部分$("a")是jq对象吧,返回值[<a>,<a>,...]
却也能引用each

王那个锋啊 | 园豆:311 (菜鸟二级) | 2014-06-21 01:37

@王那个锋啊: 

你的第一行代码:console.log($("a").html());

执行的时候:$("a").html()这个表达式返回值是字符串,然后使用console.log()函数输出

至于你说的$("a").each(function),$("a")肯定是jquery对象,而且$("a").each(function)返回值也是jquery对象,而且就是$("a"),所以你可以继续链式调用,$("a").each().addClass()等等

你只要明白一点就行了,虽然jquery对象的大部分方法都是返回jquery对象,但是也有一些方法的返回值不是jquery对象,而是字符串或者数字。这时候就不能继续链式调用了。

ThreeTree | 园豆:1490 (小虾三级) | 2014-06-21 14:47

@ThreeTree: 其实我感觉我就是纠结在log值,比如:

function type(a){return Object.prototype.toString.call(a)}
    console.log($("a"));
    console.log("上面jq对象的log值和数组输出一样,但是类型是:"+
        type($("a"))+"。我想知道他这么实现的原理是啥,菜鸟伤不起")



;(function(win,fn){fn(win)}(window,function(win){

var G= function(filter) { return new G.fn.init(filter); }

    G.fn =G.prototype = { 
      sayHello: function(a) { console.log("G"+a);return this}
    };
    window.G=G;
var init = G.fn.init=function(filter){};
    init.prototype=G.fn;
    return this

    }));
console.log(G(2).sayHello(3).sayHello(4).sayHello(5));

想知道 jquery是怎么处理返回数据的,看jquery源码绕晕了

王那个锋啊 | 园豆:311 (菜鸟二级) | 2014-06-23 09:31

@ThreeTree: 

王那个锋啊 | 园豆:311 (菜鸟二级) | 2014-06-23 09:34

@王那个锋啊: 首先$("a")是一个jQuery对象,是一个Object,所以上面的type()函数输出是正确的。但是console.log()方法输出的结果是一个数组,是因为http://blogread.cn/it/article/2253

   顺便说一句,在chrome浏览器下,console.log()输出的是一个对象。

ThreeTree | 园豆:1490 (小虾三级) | 2014-06-23 10:24

@ThreeTree:  没文化真可怕,求推荐几本书看看,

王那个锋啊 | 园豆:311 (菜鸟二级) | 2014-06-23 10:51

@ThreeTree: 我在说我。。

王那个锋啊 | 园豆:311 (菜鸟二级) | 2014-06-23 10:51

@王那个锋啊: 《悟透javascript》和 《javascript语言精粹》 这是我比较喜欢的两本。其他的你直接百度相关书籍,然后看评价,如果评价好,就看。

还有一点建议:提问题的时候最好明确指出问题是什么,最好还有预期结果和实际结果。反正我看你的问题需要各种猜测你究竟想问什么?主要原因是你自己已经处在解决问题的上下文中了,所以没有感觉出来。

ThreeTree | 园豆:1490 (小虾三级) | 2014-06-23 12:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册