返回列表 发帖

今天明白了js里面new的含义了

  1. 今天明白了js里面new的含义了
  2. 以前比如我们创建一个对象,大概可以这样
  3. var ttt={"aaa":"sss","fun_1":function(){.....}}
  4. 或者
  5. var ttt={};.....
  6. 或者定义一个构造函数
  7. function aaa(){
  8. this.name="haha";
  9. this.fun=function(){
  10. alert("hello world");
  11. };
  12. }
  13. 然后再比如var e=new aaa();
  14. 以前一直不明白既然js里面没有class为什么还有new呢,并且还有delete比如可以delete(aaa.ccc)就删除了aaa对象的ccc方法或属性
  15. 今天看msdn终于明白了new是什么意思,其实就是这个样子
  16. new的含义:
  17. 比如刚才哪个例子可以这么写
  18. var e={};
  19. aaa.call(e);
  20. 大家可能不明白了,函数吗,直接()就可以了,为什么还.call()呢,其实关键就在call里面的参数一上了,这个call是把call前面的函数当作call里面参数一对象的一个方法来执行的,比如call里面参数一是sss,其实就是执行了sss.aaa=aaa;sss.aaa()这两句,然后呢执行完sss.aaa()后,自然那些this.什么的都执行了,自然新对象里面就有了构造函数的那些方法属性了其实aaa.call(sss)和 sss.aaa=aaa;sss.aaa()还是有点区别的,就是aaa.call并没有真正把aaa加到sss下面,可是sss.aaa=aaa;就真的把aaa加到sss下面了,虽然你也可以delete掉,但是其实实现的还是不一样地。

  21. 但是还是有不明白的地方,比如

  22. var t=new XMLHttpRequest();对吧

  23. 按我上面的分析XMLHttpRequest显示是一个构造函数,应该可以通过var t={};XMLHttpRequest.call(t)这样来new这个xhr对象,可是实际上XMLHttpRequest并没有.call方法,奇怪,并且比如t.a=XMLHttpRequest;再w.a()还是不行,报告a不是函数,看来显然我这分析还是针对构造函数的,可能对于 XMLHttpRequest这样的native function并不适用

  24. 另外一个例子
  25. >>> var ttt={"name":"hello","sss":function(){alert(this.name)}}
  26. >>> ttt.sss()
  27. >>> var eee={"name":"hahaha"}
  28. >>> ttt.sss.cal
  29. >>> ttt.sss.call
  30. call()
  31. >>> ttt.sss.call(eee)
  32. 太奇异了,js的组合太有意思了,看来要理解它还需要再努力呀
复制代码
让中国Python发展的更快 ,更好.

返回列表