对象
内置对象 String Date Math Array Object ...
自定义对象
函数 Function function f(){} f就是Function的实例
面向对象编程
面向对象编程 1)用抽象的方式创建基于现实世界模型的一种编程方式
2)将需求抽象为一个对象,在这个对象上分析他的属性和方法
3)将对函数的封装转化为对对象的封装
面向过程编程 分析问题所需的步骤,用函数将这些步骤一步一步实现函数式编程
创建的对象的常见的六种方法
1.自变量方式创建(直接给对象绑定属性和方法)
var obj=new Object();
obj.name="胡歌";
obj.age=30;
obj.say=function(){
console.log("大家好,我是"+this.name);
}
var obj2=new Object();
obj2.name="胡歌2";
obj2.age=30;
obj2.say=function(){
console.log("大家好,我是"+this.name);
}
var obj3=new Object();
obj3.name="胡歌2";
obj3.age=30;
obj3.say=function(){
console.log("大家好,我是"+this.name);
}
console.log(obj,obj2,obj3);
2.字面量方式创建(字面量指的是能够使用简单结构和符号创建对象的表达式)
var obj={
name:"huge",
age:30,
say:function(){
console.log("大家好,我是"+this.name);
}
}
var obj2={
name:"huge2",
age:30,
say:function(){
console.log("大家好,我是"+this.name);
}
}
obj.say()
obj2.say()
3.工厂模式
function createObj(name,age){
var obj=new Object();
obj.name=name;
obj.age=age;
obj.say=function(){
console.log("大家好,我是"+this.name);
}
return obj;
}
var o=createObj('胡歌',30);
console.log(o);
var o2=createObj('胡歌22',30);
console.log(o2);
var o3=createObj('胡歌33',30);
console.log(o3);
4.构造函数模式 1) 首字母大写 2)通过this绑定属性和方法 3)通过关键词new 调用 构造函数 构造的属性和方法都是私有的
function CreateObj(name,age){
this.name=name;
this.age=age;
this.say=function(){
console.log("大家好,我是"+this.name);
}
}
var o=new CreateObj('胡歌',30);
console.log(o);
var o2=new CreateObj('胡歌22',30);
console.log(o2);
var o3=new CreateObj('胡歌33',30);
console.log(o3);
console.log(o.say == o2.say) // false
5.通过原型对象模型(所有的方法和属性都是共享的)每一个函数都有原型对象 原型对象中的this 也是指向 实例
function Person(){}
//Person.prototype.name = function(){}
Person.prototype={
name:"李四",
age:20,
say:function(){
console.log("大家好,我是"+this.name);
}
}
var p1=new Person();
console.log(p1); // person
p1.say(); // 大家好,我是李四
var p2=new Person();
console.log(p2); // person
p2.say(); // 大家好,我是李四
console.log(p1.say===p2.say); // true
6.组合方式(构造函数模式 和 原型对象模式 ) 实现方法共享 属性私有
function Student(name,age){
this.name=name;
this.age=age;
this.sing=function(){
console.log(this.name+"会唱歌");
}
}
Student.prototype.say=function(){
console.log("大家好,我是"+this.name);
}
var s1=new Student("张三",20);
var s2=new Student("李四",20);
console.log(s1); // student
console.log(s1.say===s2.say); // true 方法共享
console.log(s1.sing===s2.sing); // false 属性私有
call()方法 : 用来重定义 this 这个对象的
函数名称:call(obj,arg1,arg2…argN)
参数说明:
obj:this要指向的对象
arg1,arg2…argN:参数列表,参数与参数之间使用一个逗号隔开
apply()方法 : 用来重定义 this 这个对象的
函数名称:apply(obj,[arg1,arg2…argN])
参数说明:
obj:this要指向的对象
[arg1,arg2…argN]:参数列表,但是要求格式是数组
二者区别:
两者的功能完全一致,都是为了改变函数内部的函数指向,唯一的区别在于参数传递方式不同
call方法可能有有多个参数,第一个为要指向的对象,其他参数为函数的实参
apply方法最多只有两个参数,第一个是要指向的对象,第二个为数组,数组内容为函数的实参
对象
内置对象 String Date Math Array Object ...
自定义对象
函数 Function function f(){} f就是Function的实例
面向对象编程
面向对象编程 1)用抽象的方式创建基于现实世界模型的一种编程方式
2)将需求抽象为一个对象,在这个对象上分析他的属性和方法
3)将对函数的封装转化为对对象的封装
面向过程编程 分析问题所需的步骤,用函数将这些步骤一步一步实现函数式编程
创建的对象的常见的六种方法
1.自变量方式创建(直接给对象绑定属性和方法)
var obj=new Object();
obj.name="胡歌";
obj.age=30;
obj.say=function(){
console.log("大家好,我是"+this.name);
}
var obj2=new Object();
obj2.name="胡歌2";
obj2.age=30;
obj2.say=function(){
console.log("大家好,我是"+this.name);
}
var obj3=new Object();
obj3.name="胡歌2";
obj3.age=30;
obj3.say=function(){
console.log("大家好,我是"+this.name);
}
console.log(obj,obj2,obj3);
2.字面量方式创建(字面量指的是能够使用简单结构和符号创建对象的表达式)
var obj={
name:"huge",
age:30,
say:function(){
console.log("大家好,我是"+this.name);
}
}
var obj2={
name:"huge2",
age:30,
say:function(){
console.log("大家好,我是"+this.name);
}
}
obj.say()
obj2.say()
3.工厂模式
function createObj(name,age){
var obj=new Object();
obj.name=name;
obj.age=age;
obj.say=function(){
console.log("大家好,我是"+this.name);
}
return obj;
}
var o=createObj('胡歌',30);
console.log(o);
var o2=createObj('胡歌22',30);
console.log(o2);
var o3=createObj('胡歌33',30);
console.log(o3);
4.构造函数模式 1) 首字母大写 2)通过this绑定属性和方法 3)通过关键词new 调用 构造函数 构造的属性和方法都是私有的
function CreateObj(name,age){
this.name=name;
this.age=age;
this.say=function(){
console.log("大家好,我是"+this.name);
}
}
var o=new CreateObj('胡歌',30);
console.log(o);
var o2=new CreateObj('胡歌22',30);
console.log(o2);
var o3=new CreateObj('胡歌33',30);
console.log(o3);
console.log(o.say == o2.say) // false
5.通过原型对象模型(所有的方法和属性都是共享的)每一个函数都有原型对象 原型对象中的this 也是指向 实例
function Person(){}
//Person.prototype.name = function(){}
Person.prototype={
name:"李四",
age:20,
say:function(){
console.log("大家好,我是"+this.name);
}
}
var p1=new Person();
console.log(p1); // person
p1.say(); // 大家好,我是李四
var p2=new Person();
console.log(p2); // person
p2.say(); // 大家好,我是李四
console.log(p1.say===p2.say); // true
6.组合方式(构造函数模式 和 原型对象模式 ) 实现方法共享 属性私有
function Student(name,age){
this.name=name;
this.age=age;
this.sing=function(){
console.log(this.name+"会唱歌");
}
}
Student.prototype.say=function(){
console.log("大家好,我是"+this.name);
}
var s1=new Student("张三",20);
var s2=new Student("李四",20);
console.log(s1); // student
console.log(s1.say===s2.say); // true 方法共享
console.log(s1.sing===s2.sing); // false 属性私有
call()方法 : 用来重定义 this 这个对象的
函数名称:call(obj,arg1,arg2…argN)
参数说明:
obj:this要指向的对象
arg1,arg2…argN:参数列表,参数与参数之间使用一个逗号隔开
apply()方法 : 用来重定义 this 这个对象的
函数名称:apply(obj,[arg1,arg2…argN])
参数说明:
obj:this要指向的对象
[arg1,arg2…argN]:参数列表,但是要求格式是数组
二者区别:
两者的功能完全一致,都是为了改变函数内部的函数指向,唯一的区别在于参数传递方式不同
call方法可能有有多个参数,第一个为要指向的对象,其他参数为函数的实参
apply方法最多只有两个参数,第一个是要指向的对象,第二个为数组,数组内容为函数的实参