JavaScript小白最全学习笔记(6)

原型

我们所创建的每一个函数,解析器都会向函数中添加一个属性prototype,这个属性对应着一个对象,这个对象就是我们所谓的原型对象。

如果函数作为普通函数调用prototype没有任何作用,当函数以构造函数的形式调用时,它所创建的对象中都会有一个隐含的属性,指向该构造函数的原型对象,我们可以通过__proto__(两个下划线)来访问该属性。

原型对象就相当于一个公共区域,所以同一个类型的实例都可访问这个原型对象,我们可以将对象中共有的内容,同一设置到原型对象中。

当我们访问对象的一个属性或方法时,他会先在对象自身中寻找,如果有则直接使用
在这里插入图片描述

JavaScript小白最全学习笔记(6)_第1张图片

        //原型
        function MyClass(){

        }
        //向MyClass原型中添加属性a
        MyClass.prototype.a = 123;

        //向MyClass的原型中添加一个方法
        // MyClass.prototype.sayHello = function(){
        //     alert("hello");
        // }
        var mc = new MyClass();
        var mc2 = new MyClass();

        console.log(MyClass.prototype);
        console.log(mc2.__proto__ == MyClass.prototype);

        //向mc中添加a属性

        mc.a = "我是mc中的a";
        //原型对象
        function MyClass(){

        }
        //向MyClass中添加一个name的属性
        MyClass.prototype.name = "我是原型中的名字";

        var mc = new MyClass();
        // console.log(mc.name);
        //我是原型中的名字

        mc.age = 18;

        //使用in检查对象中是否含有某个属性时,如果对象中没有但原型中有,也会返回true
        console.log("name" in mc);//true

        //可以使用对象的hasOwnproperty()来检查对象自身中是否含有该属性
        //使用该方法只有当对象自身中含有该属性时,才会返回true
        console.log(mc.hasOwnProperty("name")); //false
        console.log(mc.hasOwnProperty("age"));//true

原型对象也是对象,所以他也有原型
1.当我们使用一个对象属性或方法时,会先在自身中寻找
2.自身中如果有,则直接使用
3.如果没有则去原型中找,如果原型中有,则使用
4.如果没有,则去原型的原型中找,知道找到object对象的原型
5. object对象的原型没有原型,如果在Object中依然没有找到,则返回undefined

console.log(mc.__proto__.__proto__.hasOwnProperty("hasOwnProperty"));

toString

  • 我们直接在页面中打印一个对象时,实际上时输出的对象的toString()方法的返回值
  • 如果我们希望在输出对象时不输出[object Object],可以为对象添加一个toString()方法
  //修改person原型的的toString
        Person.prototype.toString = function(){
            return"我是一只猪";
        }

数组(Array)简介

  • 数组也是一个对象,用来存储一些值
    不同的是:普通对象是使用字符串作为属性名的
        var obj = new Object();
        obj.name = "猪猪"; 
  • 而数组使用数字来作为索引 操作元素

索引:从0开始的整数就是索引
使用typeof检查数组时,会返回object

1.向数组中添加元素
语法:数组 [ 索引 ] = 值;

var arr = new Array();
arr[0] = 10;

2.读取数组中的元素
语法:数组 [ 索引 ];

console.log(arr[0]);

3.获取数组的长度 length属性
语法:数组.属性

console.log(arr.length);

连续的数组:length获取数组的长度
不连续的数组:length获取数组最大索引+1(尽量不要创建非连续数组)

4.修改length长度

arr.length = 10;

(1)如果修改的length大于原长度,则多出来的部分会空出来
(2)如果小于length原长度,则原数组多出的元素会被删除

5.向数组的最后一个位置添加元素
语法:数组[数组.length] = 值;

arr[arr.length] = 11;

数组的字面量

使用字面量来创建数组,可以在创建时就指定数组中的元素
语法:[];

var arr = [1,2,3,4];

使用构造函数创建时,可以同时添加元素,将要添加的元素作为构造函数的传递

var arr = new Array(10,20,30);

创建一个数组中只有一个元素10

arr = [10];

创建一个长度为10 的数组(少用构造函数)

arr2 = new Array(10);

数组中的元素可以是任意的数组类型

arr = ["hello", 11, true, null, undefined];

也可以是对象

        //也可以是对象
        var obj = {
            name:"猪猪"
        };
        arr[4] = obj;
        //或
        arr = [{name:"猪猪"},{name:"臭臭"}];

或一个函数

        arr = [
            function(){alert("1")},
            function(){alert("2")},
        ];
        //调用
        arr[0]();

数组里也可以放数组 :二维数组

arr = [[1,2,3], [4,5,6], [7,8,9]];

数组的四个方法

1. push()

数组末尾添加一个或多个元素,并返回数组新的长度(length只可添加一个),该方法会将数组新的长度作为返回值返回

        var arr = ["猪猪", "臭臭", "大臭臭"];
        arr.push("笨笨");
        console.log(arr);

在这里插入图片描述

2.pop()

删除数组的最后一个元素,并将删除的元素作为返回值返回

arr.pop();

2.unshit()

向数组开头添加一个或多个元素,并返回新的数组长度,向前边插入元素以后,数组的其他元素的索引会依次调整

2.shit()

可以删除数组的第一个元素,并将删除的元素作为返回值返回

你可能感兴趣的:(JavaScript)