什么是JS面向对象?

1. js的几种数据类型:

   number, string, boolean, object, undefined五种数据类型

2. js的常见内置对象类:

     Date, Array, Math,Number,Boolean, String, RegExp, Function,Object。

3. js的两个类型判断方法:

        typeof、instanceof

4.什么是面向对象和面向对象的特性:

    面向对象可以把程序中的关键模块都视为对象,而模块拥有属性及方法。
    工厂模式:就是在函数内创建一个对象,给对象赋予属性及方法再将对象返回即可。
    构造函数模式:ECMAscript中构造函数可以创建特定类型的对象,类似于Array、Date等原生JS的对象。
    原型模式:就是可以让所有对象实例共享它所包含的属性及方法。
 特性:
     抽象:抓住核心问题,把客观事物封装成抽象的类
     封装:不考虑内部实现,只考虑功能使用
     继承:从已有对象上,继承出新的对象,让某个类型的对象获得另一个类型的对象属性的方法。

抽象:

<script>
var a=12;       //变量:自由的,不属于任何人
alert(a);
var arr=[1,2,3,4,5,6];
arr.a=12;       //属性:属于一个对象的
alert(arr.a);
</script>
<script>
function aaa()          //函数:自由
{
    alert('abc');
}
var arr=[1,2,3,4];
arr.aaa=function ()     //方法:属于一个对象
{
    alert('abc');
};
aaa();
arr.aaa();
</script>

继承实例:

<script type="text/javascript">
            window.onload=function(){
          //            原型继承
                var a={
                    name:'张三'
                }
                var b=clone(a)
                b.name='李四';
                function clone(obj){
                    var f=function(){};
                    f.prototype=obj
                    return new f();
                }
                alert(b.name);              
            }
        </script>

5.object构造函数、

<script type="text/javascript">
    window.onload=function(){
           function Creatshouw(nam,se){
                    var obj=new Object();
                    obj.name=nam;
                    obj.sex=se;
                    obj.showname=function(){
                        alert(obj.name);
                    }
                    obj.showsex=function(){
                        alert(obj.showsex);
                    }
                    return obj;
                }
                // Creatshouw:类,obj1:对象
                var obj1=Creatshouw('张三','男')
                 alert(obj1.sex)
            }
        </script>

6.包装对象

<script type="text/javascript">
            var str='hello';        
            //alert(str.charAt(0));//找到下标为0的字符串片段
            //alert(str.indexOf('e'));//找到e第一次出现的下标         
            //alert(typeof str);            
            //null undefined Number Boolean String
            //包装对象:基本类型都有自己的包装对象:Number Boolean String          
            var str2=new String('hello');          
            //基本类型会自动找到对应的包装对象类型,然后包装对象把所有的属性和方法给基本类型,然后包装对象就消失
            var srr='hello';
            String.prototype.lasevalue=function(){ //给字符串的包装对象添加一个方法
                return this[this.length-1];
            }
            //alert(srr.lasevalue());       
            srr.num=10;     
            alert(srr.num);//undefined  :           
        </script>

7.继承的拖拽,利用继承类的方式

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <script type="text/javascript">
            //类:js是没有类的概念的,我们通常把构造函数当做类来用

            //类式继承:虽然简单,但是有很多坑,所以用的时候最好还是属性和方法分开继承。

            //属性:用call方式
            //方法:借助中间构造函数f实现继承

            function aa(){//父类
                this.name=[1,2,3];
            }
            aa.prototype.showname=function(){
                alert(this.name);
            }

            function bb(){ //子类
                aa.call(this);
            }
            //var a1=new aa();
//          bb.prototype=new aa();//用什么方法能够实现一句话进行对象的拷贝:类式继承

            var f=function(){};
            f.prototype=aa.prototype;
            bb.prototype=new f();
            bb.prototype.constructor=bb;//修正构造函数指向

            var b1=new bb();
            //alert(b1.name);
            //b1.showname();
            b1.name.push(4,5,6);
            //alert(b1.name);//123456
            alert(b1.constructor);

            var b2=new bb();
            //alert(b2.name); //123456:证明这种方式是引用,会相互影响

        </script>
    </head>
    <body>
    </body>
</html>

8.面向对象组件的开发:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            #div1 {
                width: 100px;
                height: 100px;
                background: red;
                position: absolute;
            }

            #div2 {
                width: 100px;
                height: 100px;
                background: yellow;
                position: absolute;
                left: 100px;
            }

            #div3 {
                width: 100px;
                height: 100px;
                background: blue;
                position: absolute;
                left: 200px;
            }

            #div4 {
                width: 100px;
                height: 100px;
                background: green;
                position: absolute;
                left: 300px;
            }
        </style>
        <script type="text/javascript">
            window.onload = function() {
                //第一个盒子:只能拖拽
                var d1 = new Drag();
                d1.init({    //配置参数
                    id: 'div1'
                });
                //第二个盒子:按下的时候title变成hello
                var d2 = new Drag();
                d2.init({ //配置参数
                    id: 'div2',
                    todown: function() {
                        document.title = 'hello';
                    }
                });
                //第三个盒子:按下title变成:面向,up的时候title:对象
                var d3 = new Drag();
                d3.init({ //配置参数
                    id: 'div3',
                    todown: function() {
                        document.title = '面向';
                    },
                    toup: function() {
                        document.title = '对象';
                    }
                });
                //第四个盒子:up的时候title变成:ok
                var d4 = new Drag();
                d4.init({ //配置参数
                    id: 'div4',
                    toup: function() {
                        document.title = 'ok';
                    }
                });
            }
            //遇到两个问题:如果参数没有写完整,会报错;如果参数写少了,顺序不对
            function Drag() { //构造函数
                this.obj = null;
                this.disx = 0;
                this.disy = 0;
            }
            Drag.prototype.init = function(opt) {
                var _this = this;
                this.obj = document.getElementById(opt.id);

                this.setting={ //默认参数
                    todown:function(){},
                    toup:function(){}
                }

                extend(this.setting,opt);

                this.obj.onmousedown = function(ev) {
                    var ev = ev || event;
                    _this.fndown(ev);
                    _this.setting.todown();
                    document.onmousemove = function(ev) {
                        var ev = ev || event;
                        _this.fnmove(ev);
                    }
                    document.onmouseup = function() {
                        _this.fnup();
                        _this.setting.toup();
                    }
                }
            }
            Drag.prototype.fndown = function(ev) {
                this.disx = ev.clientX - this.obj.offsetLeft;
                this.disy = ev.clientY - this.obj.offsetTop;
            }
            Drag.prototype.fnmove = function(ev) {
                this.obj.style.left = ev.clientX - this.disx + 'px';
                this.obj.style.top = ev.clientY - this.disy + 'px';
            }
            Drag.prototype.fnup = function() {
                document.onmousemove = document.onmouseup = null;
            }

            function extend(obj1,obj2){
                for(var i in obj2){
                    obj1[i]=obj2[i];
                }
            }
        </script>
    </head>
    <body>
        <div id="div1"></div>
        <div id="div2"></div>
        <div id="div3"></div>
        <div id="div4"></div>
    </body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值