首页 > 其他 > 详细

面向对象

时间:2020-07-13 20:34:44      阅读:58      评论:0      收藏:0      [点我收藏+]

1.面向对象的概念:OOP(面向对象)不是一种语法,是一种编程思想;js中的面向对象编程,就是创建对象,给对象添加属性和方法。

2.创建对象:一种是直接创建,另一种是构造函数方式创建

a.直接创建: var obj = {};

b.构造函数方式创建:var obj = new  object{};

构造函数方式创建示例:

 

 

var obj1 = new Object();
obj1.name = "张三";
obj1.age = 12;
obj1.sex = ;

var obj2 = new Object();
obj2.name = 李四;
obj2.age = 13;
obj2.sex = ;

 

工厂函数创建对象

概念:定义一个函数,每次调用都能得到一个对象,这种调用就能创建对象的函数,就是工厂函数;

示例:

function createObj(name,age,sex){
    var obj = new Object();
    obj.name = name;
    obj.age = age;
    obj.sex = sex;
    return obj;
}
var obj1 = createObj("张三",12,"");
var obj2 = createObj("李四",13,"");
var obj3 = createObj("王五",11,"");

 

工厂函数优点:可以同时创建多个对象;

缺点:创建出来的没有具体的类型(比如是Array和Number),都是object类型,我们看到的对象只是object,不知道具体类型。例如:

技术分享图片

解决方法:自定义构造函数。其实相当于自己写一个函数,专门用来new对象

示例:

var arr = new Array();
var obj = new Number();
var str = new String();

输出结果:

技术分享图片

 

构造函数注意事项:

a.构造函数是用来创建对象的,必须配合new使用,否则就不具备创建对象的能力;

b.构造函数内部不能有return关键字,因为构造函数会自动返回对象。如果返回基本数据类型,和不加效果一样,如果返回复杂数据类型,构造函数就没意义了。

c.如果new时,不需要参数,小括号可以省略;

d.构造函数首字母通常大写;

 

原型

概念任何函数在创建好的时候,浏览器会分配一个对象给这个函数,通过函数的prototype可以访问到这个对象。这个对象叫做原型对象,简称原型。通过new构造函数实例化出来的对象默认可以访问到这个对象的属性和方法。

使用:创建对象就使用构造函数,多个对象要使用同一个方法或属性,就把这个属性或方法绑定到原型上。实例对象想访问到原型对象,可以使用__proto__属性。

__proto__属性:任何对象都有一个属性叫做__proto__ 这个属性可以访问到对应的构造函数的原型对象,也就是构造函数的prototype属性的值。

 

构造函数、实例对象、原型对象三者之间的关系如下图:

技术分享图片

 

向对象版Tab:

做tab切换代码效果如下:

<style>
*{
    padding: 0;
    margin: 0;
    list-style: none;
}
.tab{
    width: 600px;
    height: 300px;
    border:1px solid #000;
    margin: 50px auto;
}
ul{
    height: 50px;
}
ul li{
    float:left;
    width: 100px;
    height: 50px;
    text-align: center;
    line-height:50px;
    font-size:20px;
    background-color: rgba(135, 206, 235,0.5);
}
ul li.active{
    background-color: rgb(255, 69, 0);
}
ol{
    height: 250px;

}
ol li{
    height: 250px;
    text-align: center;
    font-weight:bold;
    color:#fff;
    display:none;
}
ol li.active{
    display:block;
}
ol li img{
    width: 600px;
    height: 250px;
}
</style>
<body>
<div class="tab">
    <ul>
        <li class="active">绿色</li>
        <li>粉色</li>
        <li>蓝色</li>
        <li>1</li>
        <li>2</li>
        <li>3</li>
    </ul>
    <ol>
        <li class="active"><img src="./images/1.jpg" alt=""></li>
        <li><img src="./images/2.jpg" alt=""></li>
        <li><img src="./images/3.jpg" alt=""></li>
        <li><img src="./images/4.jpg" alt=""></li>
        <li><img src="./images/5.jpg" alt=""></li>
        <li><img src="./images/6.jpg" alt=""></li>
    </ol>
</div>
</body>
<script type="text/javascript">
function Tab(){
    this.ulis = document.querySelectorAll(ul li);
    this.olis = document.querySelectorAll(ol li);
    var that = document.querySelector(ul li.active);
    var that1 = document.querySelector(ol li.active);
    var _this = this;
    for(let i=0;i<this.ulis.length;i++){
        this.ulis[i].onclick = function(){
            that.className = ‘‘;
            this.className = active;
            that = this;
            that1.className = ‘‘;
            _this.olis[i].className = active;
            that1 = _this.olis[i]
        }
    }
}
var n = new Tab;

效果:

技术分享图片

 

构造器每一个原型对象天生带有一个属性叫做constructor,这个属性指的是这个原型对象所属的构造函数。

示例:

function Person(){
    
}
var obj1 = new Person();
console.log(obj1.__proto__.constructor === Person); // true  
console.log(obj1.constructor === Person); // true  obj1对象中没有constructor属性,所以去原型对象上找

 

 

原型链

对象天生就有一个属性叫做__proto__,那么,原型对象也是对象,他也有这个属性,也就是说,原型对象也有原型自己的构造函数和原型对象。

示例图:

 技术分享图片
这样向上的一条链式结构,我们称之为原型链。
 
对象查找属性的规则

先在自己身上找,如果有,直接使用,如果没有,顺着原型链往上找,找到了就使用,找不到就继续往上找,如果找到了null,都没有的话,就返回undefined;但是对象属性赋值和原型没关系,有就修改,没有就增加。

 

 

面向对象

原文:https://www.cnblogs.com/biben/p/13295295.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!