面向对象与面向过程
- 定义
面向过程:是一种以过程为中心的编程思想。,注重解决问题的步骤分析问题需要的每一步,实现函数依次调用
面向对象:面向对象就是抛开计算机思维,使用生活中的思维方式进行的编程方式 - 区别和联系
面向过程编程:注重解决问题的步骤,分析问题需要的每一步,实现函数依次调用
面向对象编程:注重问题中的对象,分析问题中对象的联系,实现对象间的通讯解决问题
面向对象具体分析
-
定义面向对象的方式
属性或者方法定义在原型上,对象的原型proto,对象由它本身和它的概念共同构成的//方式1 var obj={ name:"李四", age:19, }; //方式2 var obj2=new Object(); //方式3 var obj3=Object.create({name:"张三",age:20});
-
对象与JSON之间的转换
obj2={ height:"178cm", hobby:function(){ console.log("喜欢篮球"); } } console.log(obj2) var json='{"name":"李四","age":"18","sex":"男"}'; console.log(json); ////对象转换成JSON var json1=JSON.stringify(obj2); console.log(json1); ////JSON串转换成对象 var newobj=JSON.parse(json); console.log(newobj);
-
传值和传址问题
传址 对象赋值取相同的内存地址,复杂的数据类型传址
通过JSON可以解决传址问题
传址
var arr=[1,2,3,4,5];
var arr2=arr;
arr2[1]=6;
console.log(arr);
运行结果[1,6,3,4,5]
传值
var arr2=JSON.parse(JSON.stringify(arr));
arr2[1]=6;
console.log(arr);
运行结果:[1,2,3,4,5]
传址和传值问题是比较麻烦而且重要的问题因为传址的话可能会造成数据混乱,所以需要我们时刻注意着,下面的一个例子也是传址传值问题function Person(sex, height) { this.sex = sex; this.height = height; // this.hobby=function(){ // console.log("吃苦耐劳") // } } Person.prototype.hobby = function() { console.log("我是人类") } function Student(sex) { //Person.call(this,sex); Person.apply(this, [sex]); //Person.bind(this)(sex); this.action = function() { console.log("贪玩"); } } //涉及到传址的问题 //Student.prototype=Person.prototype //重新写子集的方法也会影响到父级 // 解决传址问题 function Link() {}; Link.prototype = Person.prototype; Student.prototype = new Link(); console.log(Student.prototype); // Student.prototype.hobby = function() { // console.log("我是") // } // var newStudent=new Student("男"); var newStudent = new Student("男"); //var newStudent=new Student("男"); console.log(newStudent.sex); newStudent.hobby(); newStudent.action(); var newPerson = new Person("男", "182cm"); console.log(newPerson) newPerson.hobby()
如果这个例子能够看懂的话说明你已经理解了什么是传址传值了