javascript中的面向对象(1)

面向对象

理解:
实际生活中,人使用电脑写文章。
人是一个种类,电脑是一个种类,文章也是一个种类(种类即可理解成程序中的类)。
他们三者各自有自己的一些属性和功能:人有手,头 等等,会用手来使用电脑。电脑能够接收人的指令,去做对应的事情。文章有一些固定的格式,都有标题 ,正文 等等。
当人使用电脑写文章的时候(发生交互的时候),就是使用各个对象上的方法修改属性的过程。

实质上,将程序设计按照现实生活中的规律来进行处理,更加符合人的思考方式,和处理流程,这样就方便编写程序处理事物之前的关系。

在javascript中怎么写一个类呢

方式1:工厂模式

function Person(name, age){
    var o = new Object();
    o.name = name;
    o.age = age;
    o.say = function (){
        console.log(this.name)
    }
    return o;
}
var people1 = new Person('xiaming', 10);

工厂模式的问题

  1. 全部都是实例属性和方法,每一个实例对象都是重新分配内存,公共的方法没有共享(比如say方法)。
  2. 使用instanceof 无法鉴别出实例是类的实例
    people1 instanceof Person // false
  3. people1.constructor // Object

2,3其实都是在说无法看出实例和构造类之间有什么关系

方式2:
构造函数模式

function Person(name ,age){
    this.name = name;
    this.age = age;
    this.say = function (){
        console.log(this.name);
    }
}
var people1 = new Person('xiaming', 10);
var people2 = new Person('xiaming', 10);

构造函数的

解决了:

  1. 对象实例和构造类之间关系断层的问题。
    people1.constructor// Person
    people1 instanceof Person // true

未解决:

  1. 相同的方法共享(say方法还是独立内存)
    people1.say == people2.say// false

方式3:
原型继承+ 构造函数模式

function Person(name,age){
    this.name = name ;
    this.age = age;

}
Person.prototype.say = function (){
    console.log(this.name);

}
var people1 = new Person('xiaming', 10);
var people2 = new Person('xiam', 10);

原型+构造函数解决了

  1. 相同的方法和属性没有共享的问题
    people1.say == people2.say// true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值