j s面向对象基础

什么是面向对象

在不了解原理的情况下,会使用功能
对象:黑盒子,不了解内部的结构,知道表面的各种操作(按钮)
面向对象是一种通用思想,并非只有变成中能用,任何事情都可以使用。比如:公司老总只需要告诉公司负责人需要做什么,不去关注其怎么实现的。

JS中的面向对象(OOP)
三大特性:
  • 抽象:抓住核心(把和问题相关的一类特性抓出来)
  • 封装:不考虑内部实现,用好表面的功能
  • 继承:(遗传)从父类上继承出一些方法、属性,子类可以重用,也可以有新的一些特性。
    继承有多重继承多肽
对象的组成:
  • 方法:属于一个对象的
   function aaa () {    // 函数:自由的
      alert('aaa')
    }

    var arr = [1, 4, 5, 3]
    arr.aaa = function () {       // 方法:属于一个对象的
      alert('afg')
    }
  • 属性:属于一个对象的(有主的)
    var a = 12  //变量:自由的,不属于任何人
    alert(a)

    var arr = [1, 4, 5, 3]
    arr.a = 12    // 属性,属于一个对象的
    alert(arr.a)

this:当前发生事件的对象。更准确的说:当前方法属于谁,this就是谁
不能在系统对象中随意附加方法、属性,否则会覆盖已有方法、属性:不要给arr等添加方法。

Object

构造函数
缺点:

  1. 没有new
  2. 函数重复 --- 资源浪费

解决:

  • 不需要var obj = new Object,直接使用this,此时的this是一个新的对象,不需要在return,因为程序有偷偷地return this
 function createPerson (name, age) {
 this.name = name
 this.age = age
 this.showName = function () {
  alert('我叫' + this.name)
 }
 this.showAge = function () {
  alert('我叫' + this.age)
 }
}
var person1 = new createPerson('luuz', 18)      // 解决没有new的问题
  • 原型(prototype):类的原型上添加东西
    帮助理解:
    css - class:一次给一组元素加样式。在js就叫做原型
var arr1 = new Array(12, 35, 43, 3)
var arr2 = new Array(4, 7, 43, 6)
Array.prototype.sum = function () {          // 类似class
 var result = 0
 for (var i = 0; i < this.length; i++) {
  result += this[i]
 }
 return result
}
alert(arr1.sum())
alert(arr2.sum()) 

css - 行间样式: 一次给一个元素加样式。在js叫做给对象加东西

var arr1 = new Array(12, 35, 43, 3)
var arr2 = new Array(4, 7, 43, 6)
arr1.sum = function () {              // 只给arr1添加事件,对比行间样式
 var result = 0
 for (var i = 0; i < this.length; i ++){
   result += this.[i]
  }
 return result;
}
alert(arr1.sum())
alert(arr2.sum())        // 报错

类和对象:
var arr = new Array()
类: 模子 Array
对象: 产品(成品) arr

原型用到面向对象里边?(混合方式)
function CreatePerson (name, age) {
 this.name = name
 this.age = age
}
CreatePerson.prototype.showName = function () {
  alert('我叫' + this.name)
}
CreatePerson.prototype.showAge = function () {
  alert('今年' + this.age)
}
var person1 = new CreatePerson('luuz', 23)
var person2 = new CreatePerson('luuuuu', 18)
alert(person1.showName == person2.showName)        // true (都是来源于原型上)

构造函数加属性(不一样的东西),原型上加事件(一样的东西)
类的命名规范:大驼峰(首字母大写)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 安装思路记录自己安装mysql的一次历程。mysql的安装有很多中方式,yum安装是最方便快捷的方式了,解决了各种...
    扑棱扑棱的小菜鸟阅读 4,951评论 0 0
  • 每轮打卡不再以日期为限,大家按自己的节奏画图,每人累积完成30幅作品就算完成一轮打卡,届时会在茶话会上颁发打卡奖励...
    AliceTrueLife阅读 2,962评论 0 0
  • 文/一木钉 1. 下午,办公室几个同事闲聊,一句话飘进我的耳朵。 “我得规划好孩子高中这几年,让她在学习上步入正轨...
    一木钉阅读 4,400评论 4 22
  • 这是新年的第一篇推送,带着新年的第一份期许。 如若心中有理想的生活,那么一定要在一个永远不晚的年纪去不懈追求,在追...
    阳佳奥特曼阅读 3,762评论 0 1

友情链接更多精彩内容