资讯专栏INFORMATION COLUMN

JS面向对象1

xumenger / 473人阅读

摘要:什么是面向对象编程用对象的思想去写代码,就是面向对象编程过程式写法面向对象写法我们一直都在使用对象数组时间面向对象编程的特点抽象抓住核心问题封装只能通过对象来访问方法继承从已有对象上继承出新的对象多态多对象的不同形态对象的组成方法行为操作对

什么是面向对象编程

用对象的思想去写代码,就是面向对象编程

过程式写法

面向对象写法

我们一直都在使用对象

数组Array 时间Date

面向对象编程(OOP)的特点

抽象:抓住核心问题

封装:只能通过对象来访问方法

继承:从已有对象上继承出新的对象

多态:多对象的不同形态

对象的组成

方法(行为、操作) —— 对象下面的函数:过程、动态的

属性 —— 对象下面的变量:状态、静态的

创建第一个面向对象程序
//var obj = {};
var obj = new Object(); //创建了一个空的对象
obj.name = "小明"; //属性
obj.showName = function(){ //方法
    alert(this.name);
}
obj.showName();

为对象添加属性和方法

Object对象

this指向

创建两个对象:重复代码过多

//var obj = {};
var obj = new Object(); //创建了一个空的对象
obj.name = "小明"; //属性
obj.showName = function(){ //方法
    alert(this.name);
}
obj.showName();
var obj2 = new Object(); 
obj2.name = "小强";
obj.showName = function(){
    alert(this.name);
}
obj2.showName();
工厂方式

面向对象中的封装函数

//工厂方式:封装函数
function createPerson(name){
    //1. 原料
    var obj = new Object();  
    //2. 加工
    obj.name = name;
    obj.showName = function(){
        alert(this.name);
    };   
    //3. 出厂
    return obj;
}
var p1 = createPerson("小明");
p1.showName();
var p2 = createPerson("小强");
p2.showName();

改成与系统对象类似的写法
1、首字母大写
2、New关键字提取
3、this指向为新创建的对象

/* 当new去调用一个函数:这个时候函数中的this就是创建出来的对象,而且函数的返回值直接就是this啦。(这叫做隐式返回) */
// new后面调用的函数:构造函数
function CreatePerson(name){
    this.name = name;
    this.showName = function(){
        alert(this.name);
    };
    // return obj; 隐式返回,所以这一行不用写了
}

var p1 = new CreatePerson("小明");
p1.showName();
var p2 = new CreatePerson("小强");
p2.showName();

构造函数
用来创建对象的函数,叫做构造函数
存在的问题
1、对象的引用
2.浪费内存

/* 当new去调用一个函数:这个时候函数中的this就是创建出来的对象,而且函数的返回值直接就是this啦。(这叫做隐式返回) */

// new后面调用的函数:构造函数
function CreatePerson(name){
    this.name = name;
    this.showName = function(){
        alert(this.name);
    };
    // return obj; 隐式返回,所以这一行不用写了
}
var p1 = new CreatePerson("小明");
p1.showName();
var p2 = new CreatePerson("小强");
p2.showName();

//alert(p1.showName == p2.showName); //false
/*
    var a = [1, 2, 3];
    var b = [1, 2, 3];

    alert(a == b); //false;
*/

/*
    var a = 5;
    var b = a;
    b += a;
    alert(b); //8
    alert(a); //5 基本类型:赋值的时候只是值的复制
*/

/*
    var a = [1, 2, 3]; 
    var b = a; 
    b.push(4);
    alert(b); //[1, 2, 3, 4]
    alert(a); //[1, 2, 3, 4] 对象类型:赋值不仅是值的复制,而且也是引用的传递
*/

/*
    var a = [1, 2, 3];
    var b = a;
    b = [1, 2, 3, 4];
    alert(b); //[1, 2, 3, 4]
    alert(a); //[1, 2, 3] 只要赋值就会在内存中重新生成,所以a,b互补影响
*/

/*
    var a = 5;
    var b = 5;
    alert(a == b); //true 基本类型的比较:只要值相同就可以
*/

/*
    var a = [1, 2, 3];
    var b = [1, 2, 3];
    alert(a == b); //false 对象类型:值和引用都相同才行
*/

/*
    var a = [1, 2, 3];
    var b = a;
    alert(a == b); //true
*/
原型 —— prototype

概念
去改写对象下面公用的方法或者属性,让公用的方法或者属性在内存中仅存在一份(好处:提高性能)

学习原型

类比:原型就是CSS中的class(普通方法就是CSS中的style)

普通方法的优先级比原型要高

原型可以复用,普通方法不可以复用

var arr = []; 
arr.number = 10;
Array.prototype.number = 20;
alert(arr.number); //10 普通方法的优先级高于原型
//原型:prototype:要写在构造函数下面
var arr = [1, 2, 3, 4, 5];
var arr2 = [2, 2, 2, 2, 2];
Array.prototype.sum = function(){
    var result = 0;
    for(var i=0; i

通过原型改写工厂方式原则:

相同的属性和方法可以加在原型上

混合的编程模式

function CreatePerson(name){
    this.name = name; //变化的,不能公用的属性不能写在原型上
}
CreatePerson.prototype.showName = function(){
    alert(this.name);
}   

var p1 = new CreatePerson("小明");
var p2 = new CreatePerson("小强");

alert(p1.showName == p2.showName); //true

混合的编程模式

//面向对象的写法
function 构造函数(){
    this.属性
}
构造函数.原型.方法 = function(){};

//面向对象的使用
var 对象1 = new 构造函数();
对象1.方法();

总结面向对象写法:构造函数加属性,原型加方法

面向对象的选项卡

原则
先写出普通的写法,然后改成面向对象写法

普通方法变型

尽量不要出现函数嵌套函数

可以有全局变量

把onload中不是赋值的语句放到多带带的函数中

改成面向对象

全局变量就是属性

函数就是方法

onload中创建对象

改this指向问题,要尽量让面向对象中的this指向对象

1、先写出普通方法




    
    面向对象的选项卡
    
    


    
11111
22222
33333

2、普通方法变型




    
    面向对象的选项卡
    
    


    
11111
22222
33333

关于this的指向

oDiv.onclick = function(){
    this: oDiv
};

---

oDiv.onclick = show;
function show(){
    this: oDiv
}

---

oDiv.onclick = function(){
    show();
};
function show(){
    this: window
}

改写成面向对象




    
    面向对象bianxie
    
    


    
11111
22222
33333

面向对象的复用




    
    面向对象bianxie
    
    


    
11111
22222
33333
11111
22222
33333
面向对象的拖拽

注意

Event对象(event对象一定要写到事件函数里面)

事件函数中用来阻止默认行为的return false也要写到事件函数里面

!DOCTYPE html>


    
    面向对象编写拖拽
    
    


    
本课练习

为数组对象添加求和,最大值

为字符串对象添加判断是不是最后一个字母

面向对象的选项卡

给选项卡添加一个自动播放的方法

任意学过的效果改写成面向对象

面向对象的面试题

高级面向对象 包装对象

JS基于原型的程序
String Number Boolean




    
    
    
    



给基本类型添加方法



    
    
    
    



原型链

实例对象与原型之间的连接,叫做原型链

proto (隐式连接)

Object对象类型是原型链的最外层




    
    面向对象中的原型链
    
    



面向对象的一些属性和方法 hasOwnProperty()看是不是对象自身下面的属性



    
    面向对象中的原型链
    
    



constructor查看对象的构造函数

每个原型都会自动添加constructor属性

for in 的时候,有些属性是找不到的

避免修改constructor属性




    
    面向对象中的原型链
    
    



for in循环,有些属性找不到




    
    面向对象中的原型链
    
    



instanceof运算符

对象与构造函数在原型链上是否有关系
可以用来作类型判断




    
    instanceof()
    
    



toString()

object上的方法




    
    toString()
    
    



对象的继承 什么是继承

在原有对象的基础上,略作修改,得到一个新的对象

不影响原有对象的功能

如何添加继承

属性:call

方法:for in

例子:继承的拖拽

!DOCTYPE html>


    
    继承
    
    






    
    继承
    
    






    
    继承
    
    



继承的拖拽



    
    
    
    
    


    
继承的其他形式

1、类式继承
利用构造函数(类)继承的方式
2、原型继承
借助原型来实现对象继承对象
类式继承




    
    
    
    



原型继承




    
    原型继承
    
    



拷贝继承:通用型的 有new或无new的时候都可以

类式继承:适合通过new构造函数形式

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

组件开发

1、对象的多种表现形式

提高对象的复用性

如何配置参数和默认参数

例子:拖拽

例子:弹窗

2、什么是组件?

对面向对象的深入应用(UI组件、功能组件)

将配置参数、方法、事件、三者进行分离

3、创建自定义事件

有利于多人协作开发代码

如何去挂载自定义事件与事件函数

4、例子:基于JQ的选项卡的组件开发模式
trigger() extend()等方法的使用
5、本课练习
组件开发的练习
http://tangram.baidu.com/magic/

如何配置参数和默认参数



    
    组件开发中的参数问题
    


    

拖拽的组件开发



    
    
    
    
    


    
弹窗的组件开发



    
    弹窗的组件开发
    
    


    
    
    

    
    

理解自定义事件



    
    自定义事件
    


    

用原生js实现自定义事件



    
    自定义事件
    


    
div
span
配置、方法、自定义事件分离

——正规组件的写法——基于拖拽的组件进行的修改




    
    自定义事件的拖拽组件
    
    
    


    
用JQ实现选项卡的组件开发



    
    基于JQ的选项卡组件开发
    
    
    


    
111111
222222
333333
111111
222222
333333
111111
222222
333333
111111
222222
333333

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/79368.html

相关文章

  • JS面向对象之一 【概述】

    摘要:更形象的我们还可以将面向对象理解为一种宗教信仰。这就导致面向对象教的程序员们在写时就很难受。所以为了满足信仰面向对象教的需求通过构造函数的形式模拟了伪类。这个套路的核心就是类那么里没有类所以其实是通过构造函数来模拟的伪类。 JS面向对象之一 【概述】 在学习JS的面向对象之前,我们应该先自问这样几个问题: 面向对象是什么意思? 学习面向对象的核心是什么? 为什么要学习面向对象?(它的...

    JohnLui 评论0 收藏0
  • 体验javascript之美6:如果你觉得什么都会了或者不知道js学什么了看这里-面向对象编程

    摘要:面向过程函数式编程面向对象编程第二个并不是大家理解的那样,我们先说举个现实例子就明白了。多说一句函数是编程是非常强大也是我最喜欢的,以后再说,我们先说面向对象编程。 概述 当大家已经把js的语言基础理解了,然后能够写出一些简单的例子了,这个时候基本上达到了一年工作经验的水平,而自己能够独立的写一些小功能,完成一些小效果,或者临摹修改一些比较复杂的插件的时候差不多就是两年工作经验的水平,...

    changfeng1050 评论0 收藏0
  • JS对象(1)重新认识面向对象

    摘要:对象重新认识面向对象面向对象从设计模式上看,对象是计算机抽象现实世界的一种方式。除了字面式声明方式之外,允许通过构造器创建对象。每个构造器实际上是一个函数对象该函数对象含有一个属性用于实现基于原型的继承和共享属性。 title: JS对象(1)重新认识面向对象 date: 2016-10-05 tags: JavaScript 0x00 面向对象 从设计模式上看,对象是...

    superw 评论0 收藏0
  • 面向对象的 JavaScript

    摘要:是完全的面向对象语言,它们通过类的形式组织函数和变量,使之不能脱离对象存在。而在基于原型的面向对象方式中,对象则是依靠构造器利用原型构造出来的。 JavaScript 函数式脚本语言特性以及其看似随意的编写风格,导致长期以来人们对这一门语言的误解,即认为 JavaScript 不是一门面向对象的语言,或者只是部分具备一些面向对象的特征。本文将回归面向对象本意,从对语言感悟的角度阐述为什...

    novo 评论0 收藏0
  • JS面向对象一:MVC的面向对象封装

    摘要:自己的理解的第一个参数就是的值如果没用默认是那个调用函数的当前的对象在全局作用域中就是被隐藏的所以不写且在全局作用于调用函数的时候就是可以使用或者自己指定的指向 JS面向对象一:MVC的面向对象封装 MDNjavascript面向对象 面向对象(Object-Oriented) showImg(https://segmentfault.com/img/remote/1460000016...

    Scliang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<