js面向对象

学校里学过,但是已经忘的差不多了

什么是面向对象?

everything is Object,包含属性和方法的是类,类实例化出来的是对象,对象是真实存在的。比如对象Animal有name属性和eat()方法。

面向对象的三大特征?

1.封装:我们平时所有的方法和类都是一种封装,把内部的代码保护起来,可以供外部调用。
2.继承:代码的复用,父类上的方法和属性,子类也可以拿来使用。
3.多态:一种事物(动物),可以有多种表现形式(鱼、猫、狗)

常见的js构造模式?

构造模式是针对编程中经常出现的、具有共性的问题,所提出的解决方法

1.工厂模式

function createPerson(name,age){
   var o = new Object();    //new Object()固定写法
   o.name = name;
   o.age = age;
   o.say = function(){
       console.log('我的名字是'+o.name);
   };
   return o;
}
var person1 = createPerson('xjy',18);
var person2 = createPerson('xjy2',22);
person1.say();
//缺点:所有的实例化对象都是Object类型。
console.log(person1 instanceof Object);//true
console.log(person2 instanceof Object);//true
console.log(person1 instanceof createPerson); //false

2.构造函数模式

function CreatePerson(name,age){
   this.name = name;
   this.age = age;
   this.say = function(){
       console.log('我的名字是'+this.name);
   };
}
var person1 = new CreatePerson('xjy',18);
var person2 = new CreatePerson('xjy2',22);
person1.say();
console.log(person1 instanceof Object);//true
console.log(person1 instanceof CreatePerson);//true
//既是Object的实例对象,又是CreatePerson的实例对象

3.原型对象模式

function CreatePerson() {}
CreatePerson.prototype.name = "xjy"
CreatePerson.prototype.age = 23
CreatePerson.prototype.say = function() {
    return this.name;
}
var person1 = new CreatePerson()
console.log(person1.say()) // xjy
var person2 = new CreatePerson()
console.log(person1.say == person2.say) // true
person1.name = 'xjy_2';
person1.say();   //xjy_2
person2.say();   //xjy
//修改name属性时,调用say()方法会先在实例对象上找,如果有,返回name,即xjy_2,如果没有,则继续在原型对象上找。

你可能感兴趣的:(js面向对象,面向对象)