js基础-面向对象

1.面向对象

1.1对象

面向对象:可以创建自定义类型,支持继承和多态;特征:封装。继承。多态。

基于对象:无法创建自定义类型

创建空白对象:

var obj=new Object();

var hero=new Object();
//自定义属性--状态
hero.money=1000;
hero.level=6;
//自定义方法--行为
hero.attack=function(){
   console.log("攻击");
}
1.2创建自定义对象
1.2.1 this

(1)this只出现在函数里;

(2)谁调用函数,this就指的是谁;

(3)new people(); people中的this代指被创建的对象实例;

1.2.2 构造函数-new

new Object()

new后面调用函数,我们成为构造函数

Object()我们把它视为一个构造函数,构造函数的本质就是一个函数,只不过构造函数的目的是为了创建新对象,为新对象进行初始化。

(1)开辟内存空间,存储新创建的对象

(2)把this设置为当前对象

(3)执行内部代码,设置对象属性和方法

(4)返回新创建的对象

*单个自定义对象

var student=new Object();
student.name="张三";
student.age=18;
student.sayHi=function(){
   console.log("你好");
}

console.log(student.name);
student.sayHi();

*多个对象

var stu1=creatStu("刘1");
var stu2=creatStu("刘2");
console.log(stu1);
stu1.sayHi();
console.log(stu2);
stu2.sayHi();

//创建一个函数,把对象写进函数里
function creatStu(name){
   var student=new Object();
   student.name=name;
   student.sayHi=function (){
       console.log(this.name+"nihao"):
     }   
     return student;
}  

*精简版

var aa=new stu();
console.log(aa);
aa.sayHi();

function stu(){
   this.sayHi=function(){
         console.log("nihao");
    }
}

*多个

var stu1=new Object("王五");
var stu2=new Object("赵六");
console.log(stu1);
stu1.sayhi();
console.log(stu1);
stu1.sayhi();

function Object(){
   this.name=name;
   this.sayhi=function(){
       console.log(this.name+"nihao");
    }
}
1.3 对象字面量(类似python字典)

对象的字面量是以{}存在,里面的属相和方法就是键值对

var o{
   name:"shuke",
   age=18,
   sayhi=function(){
       console.log("nihao");
       }
}; 

JSON

json是JavaScript Object Notation(JavaScript的对象表现形式,是JavaScript的子集)

json和对象字面量的区别:

json的属性必须用双引号引起来

var o{
   "name":"shuke",
   "age"=18,
   "sayhi"=function(){
       console.log("nihao");
       }
}; 

*对象本身没有length,不能用for遍历,用for和in

var aaa={
            "name":"鼠克",
            "age":18,
            "arr":[1,2,3]
        };
        for(var k in aaa){
            console.log(k);//打印的是键,属性
            console.log(aaa[k]);//打印的是值,
        }

制作一个json

var json={};
console.log(json);
for (var i=1;i<10;i++){
   json[i]=i*10;
}
console.log(json);
1.4传值和传址

(1)简单数据类型保存在栈中

a)变量保存的是数据本身

b)简单数据类型传递的是值

c)压栈,先进后出

d)地址值:哈希值

var num=1;
        fn(num);
        console.log(num);
        function fn(aaa){
            aaa=aaa*10;
        }

结果是1;因为num传递的时候是1,但是它的地址没变

*简单数据类型修改变量,在函数内部修改。

(2)复杂数据类型保存在堆中

a)复杂数据类型传地址

b)修改的是同一片内存空间

var obj=new Object();
        obj.name="张三";
        fn2(obj);
        console.log(obj);
        function fn2(Object){
            Object.name="李四";
        }

结果是:“李四”;复杂数据类型传递的是地址,就是哈希值。

1.4内置对象

js中已经定义好的对象,创建之后可以直接使用

2.数组高级API

2.1 API:应用程序编程接口

本质就是函数、方法。

2.2 Array

检测数组:(1)instanceof

                 (2)Array.isArray()

转换数字:(1)tostring()  把数组转换成字符串

JOIN 是吧数组元素用特殊方式链接成字符串(参数决定用什么连接)

var arr=["关羽","张飞","刘备"];
        var str1 =arr.join();
        var str2 =arr.join(" ");//空格就是空格连接
        var str3 =arr.join("");//空字符串是无缝连接
        console.log(str1);
        console.log(str2);
        console.log(str3);

拓展:伪数组:只在函数中使用,不能修改长短的数组

2.3常用方法

(1)栈操作(先进后出)

a)push()在数组最后面插入,返回数组长度

b)pop()取出数组字后一项,返回最后一项

(2)队列操作(先进先出)

a)unshift()在数组的最前面添加一项

b) shift()取出数组的最前面一项,返回删除的第一项

var arr=["关羽","张飞","刘备"];
        console.log(arr);
        //在数组末尾添加一个元素
        var aa=arr.push("abc");
        console.log(aa);
        console.log(arr);
        //在数组末尾删除一个元素
        var bb=arr.pop();
        console.log(arr);
        console.log(bb);
        //在数组前面添加元素
        var cc=arr.unshift("def");
        console.log(arr);
        console.log(cc);
        //在数组前面删除一项
        var dd=arr.shift();
        console.log(arr);
        console.log(dd);

(3)数组的反转和排序

var arr=["a","b","c","d"];
        //反转数组:
        console.log(arr);
        console.log(arr.reverse());

此方法能对数字和字母进行排列。只能通过第一位排列

var arr2=[7,6,5,4,3,2,1];
        console.log(arr2);
        console.log(arr2.sort());
var arr2=[7,6,5,4,3,2,1];
        var arr3=[3,5,13,12,14,2,4];
        console.log(arr2);
        console.log(arr2.sort());
        console.log(arr3.sort());
        console.log(arr3.sort(function(a,b){
            return a-b;
                    }));

通过回调函数解决sort排序问题

无参:按照数组元素的首字符对应的uicode编码从小到大排列数组元素

带参:必须为函数(回调函数)。函数中带两个参数,代表数组中的前后元素,如果计算(a-b),返回值为负数,a排在b前面,等于0不动,返回正数,a排在b后面。所以(a-b)是升序;(b-a)是降序。

(4)常用方法

contact()把参数拼接到当前数组

slice()把当前数组中截取一个新的数组,不影响原来的数组。参数start从0开始,end从1开始

splice()删除和替换当前数组的某些项目

indexOf()、lastindexOf()查索引分别是从前往后和从后往前,如果没有找到返回-1。

every()、filter()、forEach()、map()、some()数组迭代,告别for循环。

var arr1=[1,2,3];
        var arr2=[4,5,6];
        //concat把数组连接到一起
        var arr3=arr1.concat(arr2);
        console.log(arr3);
        //slice数组截取
        var arr4=arr3.slice(2);
        var arr5=arr3.slice(2,4);
        console.log(arr4);
        console.log(arr5);
        //splice删除和替换
        var arr6=arr3.splice(0,3,"关羽","关羽");
        console.log(arr3);//清空的原数组
        console.log(arr6);//清出来元素

var arr=["a","b","c","d"];
        //indexOf给元素查索引
        console.log(arr.indexOf("a"));
        console.log(arr.indexOf("d"));
        console.log(arr.indexOf("x"));
        console.log(arr.lastIndexOf("d"));

every:arr.every(function(element,index,arr){});

a)返回一个boolean值,参数是回调函数

b)对数组的每一项进行函数

c)如果都返回true,every就返回true;如果有一项返回false,every就返回false

var arr=["关羽","张飞","赵云","马超"];
        //every()它的返回值是一个boolean类型的值
        //参数是回调函数
        arr.every(function(element,index,array){
            console.log(element);
            console.log(index);
            console.log(array);
            return true
        }
            );

filter:arr.filter(function(element,index,arr){})

a)返回一个新数组,是true的返回,是false的不返回

var arr1=arr.filter(function(ele,index,array){
    if(ele.length>2){
           return true;
       }return false;
  });
console.log(arr1);

forEach

小案例:

(1)["c","a","x","a","x","a"]找到数组中每一个元素出现的次数;利用对象来做。我们想知道,a出现了几次,c出现了几次,x出现了几次。;k:v ..  k:v使用键值对比较方便,而使用数组,不太方便了。
思路:创建一个对象,判断数组中的元素,在对象中是否存在,如果存在,值+1;否则创建一个数组元素的属性,然后给值赋值为1;

var arr=["c","a","x","a","x","a"];
var json={};
for (var i=0;i<arr.length;i++){
    if(json[arr[i]]){
             json[arr[i]]+=1;
       }else{
             json[arr[i]]=1;
       }
}
console.log(json);

(2)  编写一个方法 去掉一个数组的重复元素

var arr5=[1,2,3,4,5,3,4,5];
    console.log(arr5);
    var aaa=fn(arr5);
    console.log(aaa);
    function fn(array){
        var newarr=[];
        for(var i=0;i<array.length;i++){
            var bool=true;//开闭原则
            for(var j=0;j<newarr.length;j++){
                    if(array[i]===newarr[j]){
                        bool= false;
                    }
            }
            if(bool){
                newarr[newarr.length]=array[i];
            }
        }
        return newarr;
    }










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值