面向对象

在谈面向对象之前我们先了解一下原型概念,我们在实际应用中,原型是类的基础


原型

  • 我们还是不谈那些文邹邹的东西——每一个对象都从原型继承属性,通过对象直接量创建的对象都有同一个原型对象Object.prototype,知道这些就可以了,如果想详细了解可以点击这里

  • 我们用函数来封装类
  • 牛刀小试-定义基类
function Button(){
      var color = '#00FF00';
      this.background = '#FF0000';
      var.setColor = function(c){
           color = c;
      } 
      this.run = function(){
          console.log('run');
      }
}
Botton.prototype.click = function(){
     console.log('click');
}
var btn = new Button();
console.log(btn.color) //undefined 私有变量
console.log(btn.background) //#FF0000 公共变量
btn.setColor('#0000FF'); //not a function  私有函数
btn.run() //run 公有方法 *与下面的protorype方法不同定义的不同,下面会看到
btn.click() //click 公有方法
//
console.log(btn.constructor == Button) //验证实例的构造函数原型
//
console.log(btn instanceof Button) //验证原型与实例关系
//
console.log(Button.prototype.isPrototypeOf(btn)) //验证原型和实例关系
//
console.log(btn.hasOwnProperty('background')) //判断属性是否是本地的或是继承来的

构造函数内变量和方法不共享,原型链上的函数共享

  • 继承
    我们使用callapply来模拟继承,同时继承又分为全继承和部分继承
  • 全继承
function iButton() {
      Button.call(this); //这里可以使用apply,作用一样,只是参数的格式不同
}
//全部继承Button的构造函数
iButton.prototype = Button.prototype; //继承Button的原型链。
var ibtn = new iButton();
console.log(ibtn.background);
console.log(ibtn.click);
  • 部分继承
function iButton() {
}
iButton.prototype = Button.prototype; //只继承Button的原型链。
iButton.prototype.constructor = iButton; //iButton的构造函数是自己本身
var ibtn = new iButton();
console.log(ibtn.background); //undefined
console.log(ibtn.click); //click
//
function iButton() {
    Button.call(this); //call只能继承Button的构造函数
}
var ibtn = new iButton();
console.log(ibtn.background); //#FF0000
console.log(ibtn.click); //not a function
  • 多态
    这个概念其实就比较简单了,封装函数预留参数,通过对参数类型和内容的判断来执行不同的操作来实现。这里就不做案例了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、JavaScript基础知识回顾 1.1 JavaScript 1.1.1 javascript是什么? Ja...
    福尔摩鸡阅读 5,190评论 0 7
  • title: js面向对象date: 2017年8月17日 18:58:05updated: 2017年8月27日...
    lu900618阅读 3,627评论 0 2
  • 一、面向过程和面向对象的区别、联系 1.面向过程编程:注重解决问题的步骤,分析问题需要的每一步,实现函数依次调用。...
    空谷悠阅读 4,357评论 1 11
  • 2016.9.9 第6章 原型与面向对象 原型虽然是定义对象的一种很方便的方式,但它的本质依然是函数特性。 使用原...
    如201608阅读 3,923评论 0 0
  • 22岁,生日快乐。 感恩带给我爱和温暖的每一个人。 22岁,给自己许一个小小愿。 愿一切安好 继续努力 做一个不...
    西栖阅读 890评论 0 0