JavaScript基础-4


一、this

浏览器在调用函数时,每次会向函数内部传递一个隐形参数,this.
this指向一个对象,该对象称为执行函数的上下文对象。
根据函数调用方式的不同,this会指向不同的对象

	   function fun(){
           console.log(this);
       }
       //以函数的形式调用,this就是window
       fun();//window
       
       var obj = {name:"Ann", sayName:fun};

       console.log(obj.sayName == fun);//true
       //以方法的形式调用,this就是调用方法的那个对象,现在this是obj
       obj.sayName();//Object

以构造函数的形式调用时,this是那个新创建的对象

二、构造函数

执行步骤:1-创建一个新的对象 2.将新建的对象作为函数中的this 3-逐行执行构造函数中的代码 4-将新建对象作为返回值返回。

       function Person(name, age){
           this.name = name;
           this.age = age;
       }

       var pre = new Person("李华",16);
       console.log(pre.name, pre.age);

构造函数也是普通函数的一种,与创建一般函数没有区别,但创建构造函数要注意首字母大写。
1.构造函数的创建

function Person(){
           
       }

2.构造函数的调用:普通函数可以直接调用,但构造函数需要用new关键字调用

	   var pre = new Person();
       console.log(pre);

使用一个构造函数创造的对象,我们称为一类对象,也将一个构造函数称为一个类

3.使用instanceof检查一个对象是否是一个类的实例,是返回true,不是返回false

	   console.log(pre instanceof Person);

优化后

		function Dog(name, age){
           this.name = name;
           this.age = age;
           this.sayName = fun
        //    this.sayName = function(){
        //        alert("名字"+this.name);
        //    };每执行一次就会创建一个新的方法,这样太多了

       }
       function fun(){
               alert("名字"+this.name);
           }
       var dog = new Dog("旺柴", 2);
       dog.sayName();

三、原型对象(prototype)

每创建一个函数,解析器都会向函数中添加一个属性prototype

原型对象相当于一个公共的区域,所有同一个类的实例都可以访问到这个原型对象
我们可以将对象中共有的内容,统一设定到原型对象中
原型对象代码示例如下:

		function MyClass(){

        }
        //向MyClass对象的原型中添加属性a
        MyClass.prototype.a = 123;
        var mc = new MyClass();
        var mc2 = new MyClass();
        //console.log(mc.__proto__ == MyClass.prototype);true
        console.log(mc.a);//结果123
        //当访问对象的属性或方法时,先在自身寻找,有就直接使用,没有的话就去原型对象里找,找到返回
        // 向mc中添加一个a
        mc.a = "mc里的a";
        console.log(mc.a);//结果mc里的a

以后在创建构造函数时,可以将统一的对象或方法写到原型对象中,这样就不用分别为每一个对象添加,也不会影响全局作用域。

        function MyClass(){

        }
       
        var mc = new MyClass();
        var mc2 = new MyClass();
       //向MyClass中添加name属性
        MyClass.prototype.name = "haha";
        console.log(mc.name);//结果123

        // 使用"name" in mc 检查,即使mc中没有,也会去原型对象中找
        //检查mc自身中是否含有name属性,只有自身存在时才会返回true
        console.log(mc.hasOwnProperty("name"));//false

原型对象也有原型,当我们想使用一个对象或方法时,会现在它自身寻找,自身寻找不到再去原型中寻找,原型中找不到去原型的原型寻找,找到object的原型再找不到就不找了,返回undefined

四、数组

数组(Array)是一个内建对象。与普通对象一样,存储一些值;数组是用数字存储索引(index)
1.创建与赋值

		//1.创建数组对象
        var arr = new Array();
        //2.向数组中添加数据
        arr[0] = 10;
        console.log(arr);

        //创建并添加数据
        var arr = [1,2,3,4];
        console.log(arr);

–length
数组名.length可以获取数组的长度

修改length的长度,修改后的数组长度>原来的,那么多余的数组部分会空出来;修改后的数组长度<原来的,那么多余的数组部分会被删除掉

–四个方法
1)push()方法,向数组的末尾添加一个或多个元素,并返回数组的长度

//arr.push(66);
arr.push(7,8,9);
//Array(7) [ 1, 2, 3, 4, 7, 8, 9 ]

2)pop()方法,删除数组的最后一个元素,并返回

arr.pop();//Array(6) [ 1, 2, 3, 4, 7, 8 ]

result = arr.pop();
console.log("result="+result);//返回的是被删除的那个数据

3)unshift()方法,像数组的0号位插入一个数据

arr.unshift(5);
//Array(8) [ 5, 1, 2, 3, 4, 7, 8, 9 ]

4)shift()方法,删除数组的第一个元素,并将被删的元素作为返回值返回

五、函数的方法

1.Call和apply方法
apply和call是函数对象的方法

		function fun(){
            alert(this);
        }
        var obj = {};
        //fun 函数对象
        fun.call(obj);//可以通过参数指定this

2.argument
函数调用时,解析器会传递两个隐含的数据,一个是this,一个是arguments,封装实参的对象,类数组对象,有索引也有长度

		function fun(){
            console.log(arguments.callee);
        }
        //callee对应的函数对象是当前正在指向的函数对象
        fun();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值