1:什么是对象? a:对象就是由若干个键值对,无须组成的数据类型,被称之为对象。 b:简单理解,提供了特有的方法和属性就是对象! c:“对象”是一个容器,封装了“属性”(property)和“方法”(method)。 举例: var o={ name:‘tom’, age:12, fun:function(){ alert(1) } } 2:键值对? 花括号里面冒号前被称之为键,冒号后被称之为值,通过键获取值。 3:什么是面向对象? 面向对象是一种编程思想,通过这种思想来完成代码的编程。(oop==Object Oriented Programming) 我们以前写js的思路叫 面向过程的写法。 4:面向对象的特点? a、抽象: b、继承: c、封装: d、多态性: 5:学习面向对象的优点? a:理解这种思想以后,我们可以自己创建一些方法和功能! b:可以给其他对象扩展方法 6:什么是方法和属性,什么是函数和变量? 变量:是自由自在一个数据; 属性:必须绑定在对象下面的数据; 函数:是一个代码块的集合; 方法:是绑定在某一个对象下面的函数 7:工厂模式的写法 1:在一个函数里面创建一个对象 2:给这个函数创建属性和方法 3:return返回对象 4:把函数赋值给一个变量,那么这个变量就拥有了函数的属性和方法 5:调用 举例: function person(name,age){ var o=new Object(); o.name=name; o.age=age; o.f=function(){ alert(this.name+this.age) } return o; }
var o1=new person('tom',12) ; var o2=new person('jack',14) o1.f(); o2.f();8:工厂模式的优点: 解决了多个相似对象产生大量重复的代码的问题。节省了代码量,提高了工作效率 缺点: 不能识别对象实例化。 9:当函数被关键字 new 以后,那么这个函数就变成了对象,对象就可以共享自己的方法和属性! 10:实例化和类,对象的概念 function a(){
} var o=new a(); 对象:函数被关键字 new 以后就变成了实例化对象 类:函数被关键字new完以后这个整体(new a())被称之为类 类的作用就是一个模具,通过这个模具可以复制很多对象。 实例化:函数被关键字 new完以后,赋值给一个变量的过程叫实例化对象 var o=new a(); 变量被实例化后,就拥有了函数对象里面的属性和方法。11:构造函数写法: 举例: function Peop(name,age){ this.name=name; this.age=age; this.fun=function(){ alert(this.name+this.age); alert(this) } } var p1=new Peop(‘老栗’,18) var p2=new Peop(‘小李’,118) p1.fun(); p2.fun(); 12: 工厂模式和构造函数的区别? 1:工厂模式的函数里面要创建一个对象,构造函数没有 2:工厂模式的函数里面要用return 返回,构造函数没有 3:工厂模式的函数赋值给变量的时候不用new 关键字,构造函数有 new 4: 工厂模式的函数不需this ,构造函数有this 5:构造函数的函数名首字母需要大写,工厂不需要 13:读取属性的方式: 举例: var o={ name:‘老栗’, age:18, } alert(o.name) alert(o[‘age’]) 14:删除属性方法 删除属性的唯一方法是使用 delete 操作符; 设置属性为 undefined 或者 null 并不能真 正的删除属性, 而仅仅是移除了属性和值的关联。 15:call()和apply()方法 call()和apply()方法都具有改变this指向的作用,this这个时候指向的是call()方法里面的参数。 16:原型是什么? a:prototype翻译过来叫原型。 b:prototype即是函数的属性,本身也是对象。 c:prototype存在于函数中。 17:原型prototype的作用? 原型prototype的作用就是可以共享。 通过prototype可以共享对象属性和方法! 18:原型的写法: 举例1: var arr1=new Array(1,2,3,4); var arr2=new Array(1,2,3,4,5); Array.prototype.jia=function(){ var r=0; for(var i=0; i<this.length; i++){ r+=this[i] } return r; } alert(arr1.jia()) alert(arr2.jia()) 举例2: function F(){
} F.prototype.name='老栗'; F.prototype.age=15; F.prototype.fun=function(){ alert(this.name+this.age) } var o1=new F(); var o2=new F(); o1.fun();//老栗15 o2.fun();//老栗1519: prototype constructor proto 三者之间的关系 1:每一个函数都有一个prototype属性,但是prototype属性本身又是Obj类型的对象 因此我们可以通过prototype 给这个对象添加属性和方法 1.1 prototype的作用就是为了解决实例对象之间属性和方法的共用问题
2:prototype对于函数来说他是一个属性,但是对于实例对象来说他是一个对象,(他是本身也是一个对象) 构造函数通过这个属性就可以演化成原型对象,原型对象在通过关键字new给一个变量, 那么这个变量就是实例对象 3:constructor是prototype下面的一个属性 实例对象通过constructor 指向了函数 4:js中每一个对象都有自己的__proto__属性 实例化对象通过__proto__ 指向了原型对象20:原型+构造写法: 原型+构造写法解决了想共享的写在prototype下面,不想共享的写在构造函数里面 function F(name,age){ this.name=name; this.age=age; }
F.prototype.fun=function(){ alert(this.name+this.age) } var o1=new F('哈哈',12); var o2=new F('看看',122); o1.fun() o2.fun() alert(o1.fun==o2.fun)//true