面向对象快速入门

一、对象的组成:

  ①方法(行为、操作)------- 函数:过程、动态的,也就是对象下面的函数

  ②对象的属性 ------ 变量: 静态的,也就是对象下面的变量

  对象快速入门案例:

//构造函数
function CreatPerson(name,sex){
    this.name = name;
    this.sex = sex;
}
//对象原型方法:prototype式关键字,相当于所有创建的对象都包含该方法
CreatPerson.prototype.showname = function(){
    alert(this.name)
}
 //创建一个对象
var p1 = new CreatPerson('小明','男');
//对象的传递方式是引用传递,当更改p2的某一个属性则p1的属性也将更改
var p2 = p1;
p2.sex = '女';
//弹出p1.sex则会随p2变成女
alert(p2.sex);

 二、对象的继承:

  拷贝继承:通用型,有new或者无new都适合

//继承 : 子类不影响父类,子类可以继承父类的一些功能 ( 代码复用 )
//属性的继承 : 调用父类的构造函数 call
//方法的继承 : for in :  拷贝继承 (jquery也是采用拷贝继承extend)
function CreatPerson(name,sex){ // 构造函数:父类
    this.name = name;
    this.sex = sex;
}
//原型
CreatPerson.prototype.showName = function(){
    alert(this.name);
}
var p1 = new CreatPerson('小明','男');
p1.showName();
function CreatStar(name,sex,job){ // 子类
    CreatPerson.call(this,name,sex);//继承CreatPerson的属性
    this.sex = job;
}
//obj1.prototype = obj2.prototype;直接赋值会造成更改任意一个obj都会改变另一个obj的方法
//创建函数拷贝obj2的方法赋值给obj1
function extend(obj1,obj2){
    for(var attr in obj2){
        obj1[attr] = obj2[attr];
    }
}
extend( CreateStar.prototype , CreatePerson.prototype );//继承CreatPerson的方法
//CreateStar.prototype改变不会对CreatePerson.prototype造成影响
CreateStar.prototype.showJob = function(){
};
var p2 = new CreateStar('黄晓明','男','演员');

   类式继承:JS是没有类的概念的,我们可以把js中的构造函数看成是类。比较适合有new的形式

//属性和方法要分开继承
//父类对象的构造函数
function Parent(){    
    this.name = '小明';
    this.age = 25;
}
Parent.prototype.showName = function(){
    alert(this.name);
}
//子类对象的构造函数
function Child(){
    //子类的属性继承
    Parent.call(this.)    
}
//创建一个空构造函数来接收Parent对象的原型
var F = function(){}
//将Parent的原型赋值给F的原型
F.prototype = Parent.prototype;
Child.prototype = new Parent();
//修正Child的指向
Child.prototype.constructor = Child;
var c1 = new Child(); 

  原型继承:比较适合无new的对象

var a = {
    name:'小明'
}
var b = cloneObj(a);
function cloneObj(obj){
    var F = function(){}
    F.prototype = obj;
    return new F(); 
}

猜你喜欢

转载自www.cnblogs.com/rickyctbur/p/11032511.html