js原理性研究

1.作用域和其它语言不同

代码块不会建立作用域,如

<script>
function a()
{
if(true)
{
var b = "dfdf";
}
alert(b);
}
a();
</script>

打出dfdf

2.在或与且的问题上,如果前面的表达式满足条件,后面的表达式不会计算。

并且||与&&不仅仅是用来判断的,他们也返回值

alert(0||''||455||5656)  //455

alert(45&&344&&33&0)  //0

有一个办法来防止报错

alert(a.b&&a.b.c)

如果a.b没有会直接输出undefine,不然就会报错

3.[]这个东西更应该理解为属性防问,其实

  function a()
        {
            this.b = 9;
        }
        var d = new a;
        alert(d["b"]); 等于d.b;

4.js是先有一个编译过程的,这个过程是以一个<script>为单位的

<script>
       a ();
        function hh() {
            this.b = 9;
        }
        function a()
        {
            this.b = 9;
            alert(7);
        }
    </script>

下载完一块script后,先把方法编译好,再执行,所以这里工a()是可以执行的

但是如果是两个代码块

<script>
       a ();
        function hh() {
            this.b = 9;
        }

  </script>

<script>
        function a()
        {
            this.b = 9;
            alert(7);
        }
  </script>

a()就执行不了,因为下面一个script块还没有加载上

 var c = new hh;
       for (name in c)
       {
           document.writeln(name + ":" + c[name]);
       }


js 对象基本构成

首先我认为JS的基础是function, js必然有个最基本的function比如

function object()


我们所谓的var a = {} 实际是 var a = new object()

var a = 5 实际是 var a = new number();

就连var a= function(){} 这本身也是new了function

function 有几个属性 比如 prototype constructor

比如

Object.prototype.kk = 4;

var a = 6;

aler(a.kk)  //4

你只要给object的prototype加上属性,任何实例都会有这样的属性

但是原生代码的function 比如object number string 他们的prototype只能加属性,不能替换

比如

Object.prototype = a;

这是行不通的

但是functiion这个对象本身,提供了一个可以替换的prototype

比如

function a()

{}

a.prototype = b;

这是有用的,如果你用调试工具,会发现其实a有两个prototype属性,一个是不可写的,一个是可写的。

关于prototype的用处,除了继承之外,也可以提高运行效率

function abc() {
          this.a = function () { alert() };
          this.b = 5;
          alert(2);
      }
      function dd() {
          alert();
          return 1;
      }
      abc.prototype.al = dd();
      var d = new abc;
      var c = new abc;

如果把al写进function里面,就是写进了,constructor里面,每次new的时候,都会去执行,如果写在prototype里面,只会执行一次

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值