1、面向过程
- 先将解决问题所需要的步骤分析出来,再用函数将这些步骤实现,按照业务一个一个的依次调用这些函数,从而解决问题。
2、面向对象
- 先将参与问题的对象分析出来,然后分析这个对象在这个问题中所具备的属性和行为,重点是研究参与问题的各个对象
- 面向对象的优势:
1、维护简单
2、可扩展性
3、代码重用性
4、代码效率高
3、对象 (万物皆对象)
- 对象中所有的值都是以键值对的形式来存在的
- 如果键值对的值是一个具体的值,则这个键值对就叫对象的属性。
- 如果键值对的值是一个函数,则这个键值对就叫对象的方法
var obj = {
name : "张三", //对象的属性
say : function(){ //对象的方法
console.log(wedqwd);
}
}
4、抽象
- 在很多对象中按照某个共同的特征归为一个类,这个过程就叫抽象。
5、类
- 是具有共同特征的对象的集合
- class 在 java php等语言中 类由class来声明
- 在js中我们可以通过构造函数的形式来定义一个类。
- 构造函数,首字母必须大写
6、this指向
- 当构造函数,没有实例化 之前,其中this指向window
- 当构造函数实例化之后,其中this指向 实例化出来的对象
7、原型对象
- 实例化对象的时候,传参是给对象的属性传入具体值,而构造函数中,定义的方法其传参是在使用这个方法时,在传进去,不是定义类的时候给它传。
//定义一个人类
function Person(names) {
this.type = '人类';
this.names = names;
this.say = function (t) {
console.log(this.names + "说:" + t);
}
}
var qiang = new Person('强哥');
var tan = new Person('摊主');
qiang.say('你这挂管用吗');
tan.say('不管,十年大礼包,滚');
- 当实例化出来的对象,有特有的方法或者属性时,可以直接给这个对象添加
qiang.kan = function () {
console.log('强哥掏出🔪,额宰');
}
qiang.kan();
- 原理:
1、对象的方法或者属性,在执行或者使用的时候,会先在对象本身去查找这个方法或者属性
2、如果找到就调用,如果找不到,就去他的原型对象中去找
3、如果在原型对象还找不到,就去原型对象的原型对象里去找(原型链)
4、直到找到位置,找到就调用,找不到就报错
8、原型链
- 所有的对象都有原型对象
- 我们可以通过原型对象给已经封装好的类,添加公有方法或属性
//给数组对象添加一个排序的方法
Array.prototype.pai = function () {
this.sort(function (a, b) {
return a - b;
})
console.log(this);
return this;
}
var arr = new Array(657, 678, 23, 567, 3, 6, 7, 89, 45, 2)
console.log(arr);
arr.pai();
//给字符串原型添加去除违禁词的方法(可以去除一个、多个)
String.prototype.wj = function(arg){
//一个违禁词时, arg是一个字符串
//多个违禁词时, arg是一个数组
console.log(typeof(arg));
//根据传入的参数判断有几个参数
if(typeof(arg) == 'string'){
console.log('一个参数');
//定义正则
var reg = new RegExp(arg,'g');
//修改违禁词
var str1 = this.replace(reg,'*');
}else if(typeof(arg) == 'object'){
console.log('多个参数');
//使用for循环,将所有的违禁词循环
var str1 = this;
for(var i = 0; i < arg.length; i++){
console.log(arg[i]);
//根据违禁词设置正则
var reg = new RegExp(arg[i],'g');
str1 = str1.replace(reg,'*');
}
}else{
console.log('参数错误');
}
return str1;
}
9、arguments
- 可变参数数组
- 当使用arguments的时候,不能写形参,直接写实参
- 实参会自动出现在函数的arguments属性中
- arguments是函数原型中的一个属性
- 它是一个伪数组,可以当成数组来使用,(但是不能使用数组的操作方法)
function Person() {
this.names = arguments[0];
this.age = arguments[1];
this.sex = arguments[2];
this.cla = arguments[3];
this.school = arguments[4];
this.say = function () {
console.log('你好,我是' + this.school + this.cla + this.names);
}
}
网友评论