• JavaScript


    前端三大块 

    1. HTML:页面结构
    2. CSS:页面表现:元素大小、颜色、位置、隐藏或显示、部分动画效果
    3. JavaScript:页面行为:部分动画效果、页面与用户的交互、页面功能

    1. JS概述

    • JavaScript,浏览器内置了JavaScript语言的解释器
      • JavaScript代码在浏览器上就可以运行
    • DOM,(Document Object Model)文档对象模型
      • 通过它可以操作HTML文档的相关功能,例如:对标签内容进行删除和替换等
    • BOM,(Browser Object Model)浏览器对象模型
      • 通过它可以操作浏览器相关的功能,例如:浏览器设置定时器,浏览器定时刷新页面

    JavaScript是编程语言,DOM和BOM是两个模块,利用JavaScript语言再结合DOM、BOM模块可以让我们的页面出现动态的效果。

    2. JavaScript

    2.1 js代码的存在形式

    1)Script代码块,只能在当前页面使用

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>JS学习</title>
        <script type="text/javascript">
        // 内部编写JavaScript代码
        </script>
    </head>
    <body>
    </body>
    </html>

    2)独立js文件,可以被多个引入之后使用

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>JS学习</title>
        <script type="text/javascript" src="JavaScript文件路径"></script>
    </head>
    <body>
    </body>
    </html>

    3)推荐的位置

    • 推荐把js代码都放在body标签的底部
    • 因为JS放在下面可以让用户快速看到页面上的 HTML和CSS效果,但JS的效果必须还要等耗时操作处理完才能用

    2.2 变量&注释

    2.2.1 变量

    • JavaScript 是一种弱类型语言,javascript的变量类型由它的值来决定
    • 局部变量必须一个 var 开头,如果未使用var,则默认表示声明的是全局变量
    <script type="text/javascript">
        // 全局变量
        name = 'hgzero';
        function func(){
            // 局部变量
            var age = 21;
            // 全局变量
            gender = "男"
        }
      
        //同时定义多个变量可以用","隔开,公用一个‘var’关键字
        var c = 45,d='qwe',f='68';
    
        func();
        console.log(gender); //
        console.log(name);   // hgzero
        console.log(age);    // 报错:age是fun的局部变量,外部无法获取
    </script>

    2.2.2 注释

    一条javascript语句应该以“;”结尾

    • js中单行注释用 // 
    • 多行注释用 /* */
    <script type="text/javascript">    
    // 单行注释
    var a = 123;
    /*  
        多行注释
        1、...
        2、...
    */
    var b = 'str';
    </script>

    2.3 常见数据类型

    • 5种基本数据类型:
      • number、string、boolean、undefined、null
    • 1种复合类型:
      • object

    2.3.1 数字(Number)

    • JavaScript中不区分整数值和浮点数值,JavaScript中所有数字均用浮点数值表示
    • 可以用 typeof(“xx”) 查看数据类型
    // 声明
    var page = 111;
    var age = Number(18);
    var a1 = 1,a2 = 2, a3 = 3;
    // 转换 parseInt("1.2"); // 将某值转换成数字,不成功则NaN parseFloat("1.2"); // 将某值转换成浮点数,不成功则NaN
    /* NaN,非数字。可使用 isNaN(num) 来判断。 Infinity,无穷大。可使用 isFinite(num) 来判断。 */

    2.3.2 字符串(String)

    1)字符串的声明

    // 声明
    var name = "hgzero";
    var name = String("hgzero");
    var age_str = String(21);

    2)字符串常用方法

    // 常用方法
    var name = "hgzero";
    var value = names[0]                    // 索引
    var value = name.length                 // 获取字符串长度
    var value = name.trim()                 // 去除空白
    var value = name.charAt(index)          // 根据索引获取字符
    var value = name.substring(start,end)   // 根据索引获取子序列
    var value = name.split('')              // 把一个字符串分隔成字符串组成的数组

    parseInt() // 将数字字符串转化为整数
    parseFloat() // 将数字字符串转化为小数

    toUpperCase() // 字符串转大写
    toLowerCase() // 字符串转小写
    // 字符串的反转 var str = 'asdfj12jlsdkf098'; var str2 = str.split('').reverse().join(''); alert(str2);

    3)示例:标题跑马灯

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>真人比例充气xxx</title>
    </head>
    <body>
    <h1>HTML标签和样式</h1>
    <script type="text/javascript">
        setInterval(function () {
            // 从HTML文档的title标签中获取标题文字
            var title = document.title;
            var lastChar = title.charAt(title.length - 1);
            var preString = title.substring(0, title.length - 1);
            var newTitle = lastChar + preString;
            // 新字符串赋值到HTML文档的title标签中。
            document.title = newTitle;
        }, 1000);
    </script>
    </body>
    </html>

    2.3.3 布尔类型(Boolean)

    • 布尔类型仅包含真假
    • 其首字母小写
    var status = true;
    var status = false;
    /*
    在js中进行比较时,需要注意:
        ==       比较值相等
        !=       不等于
        ===      比较值和类型相等
        !===     不等于
        ||        或
        &&        且
    */

    2.3.4 数组(Array)

    1)数组的声明

    // 声明
    var names = ['hgzero', 'zero', 'stu']
    var names = Array('hgzero', 'zero', 'stu')

    2)数组的常用方法

    // 常见方法
    var names = ['hgzero', 'zero', 'stu']
    names[0]                        // 索引
    name.length                     // 获取数组的长度
    name.indexOf("zero")            // 返回数组中第一次出现的索引
    
    names.push(ele)                 // 尾部追加元素
    var ele = names.obj.pop()       // 尾部移除一个元素
    
    names.unshift(ele)              // 头部插入元素
    var ele = obj.shift()           // 头部移除一个元素
    
    names.splice(index,0,ele)       // 在指定索引位置插入元素
    names.splice(index,1,ele)       // 指定索引位置替换元素
    names.splice(index,1)           // 指定位置删除元素
    
    names.slice(start,end)          // 切片
    names.reverse()                 // 原数组反转
    names.join(sep)                 // 将数组元素连接起来以构建一个字符串
    names.concat(val,..)            // 连接数组
    names.sort()                    // 对原数组进行排序

    2.3.5 字典(对象Object)

    • JavaScript中其实没有字典类型,字典是通过对象object构造出来的
    // 声明
    info = {
        name:'hgzero',
        "age":18
    }
    // 常用方法 var val = info['name'] // 获取 info['age'] = 20 // 修改 info['gender'] = 'male' // 新增 delete info['age'] // 删除

    示例:动态表格

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>JavaScript学习</title>
        <style>
            table{
                /*边框合并*/
                border-collapse: collapse;
            }
            table th,table td{
                border: 1px solid #ddd;
                padding: 8px;
            }
            table th{
                font-weight: bold;
            }
        </style>
    </head>
    <body>
    <table>
        <thead>
            <tr>
                <th>学号</th>
                <th>姓名</th>
                <th>性别</th>
            </tr>
        </thead>
        <tbody id="body">
        </tbody>
    </table>
    <script type="text/javascript">
        var userList = [
            {id:1,name:'hgzero',gender:'男'},
            {id:2,name:'吴老板',gender:'男'},
            {id:3,name:'肖老板',gender:'男'}
        ];
        // 笨方法
        for(var i in userList){
            var row = userList[i];
            var trNode = document.createElement('tr');
            var tdNodeId = document.createElement('td');
            tdNodeId.innerText = row.id;
            trNode.appendChild(tdNodeId);
            var tdNodeName = document.createElement('td');
            tdNodeName.innerText = row.name;
            trNode.appendChild(tdNodeName);
            var tdNodeGender = document.createElement('td');
            tdNodeGender.innerText = row.gender;
            trNode.appendChild(tdNodeGender);
            var bodyNode = document.getElementById('body');
            bodyNode.appendChild(trNode);
        }
        // 简便方法
        /*
        for(var i in userList){
            var row = userList[i];
            var trNode = document.createElement('tr');
            for(var key in row){
                 var tdNode = document.createElement('td');
                tdNode.innerText = row[key];
                trNode.appendChild(tdNode);
            }
            var bodyNode = document.getElementById('body');
            bodyNode.appendChild(trNode);
        }
        */
    </script>
    </body>
    </html>

    2.3.6 其他(null,undefine)

    • null是JavaScript语言的关键字,它表示一个特殊值,常用来描述“空值”,相当于Python的None
    • undefined是一个特殊值,表示只是声明而变量未定义
      • Undedfine类型只有一个值,即undefine。
      • 当声明的变量未初始时,该变量的默认值值undefine
      • 当函数无明确返回值时,返回的也是值 undefine
    var name;
    console.log(typeof(name));

    2.4 条件判断

    2.4.1 if,else 用于判断

    var age = 18;
    if(age <18){
    }else if(age>=18 and 1 == 1){
    }else if(age>=30){
    }else{
    }

    2.4.2 switch,case 用户判断等于某些值

    var num = 18;
    switch(num){
        case 10:
            console.log('未成年');
            break;
        case 18:
            console.log('成年');
            break;
        case 35:
            console.log('油腻老男人');
            break;
        case 100:
            console.log('....');
            break;
        default:
            console.log('太大了');
    }

    2.5 循环语句

    JavaScript中循环有两种写法:

    • for(var i in ['stu1','stu2','stu3'])
      • 默认生成索引,适用于:字符串、元组、字典。
    • for(var i=0;i<10;i++)
      • 自定义索引并设置增加步长,适用于:字符串、元组。
      • 字典索引非有序
    // 第一种方式
    var names = ['stu1', 'stu2', 'stu3']
    for(var index in names){
        console.log(index, names[index])
    }
    
    // 第二种方式
    var names = ['stu1', 'stu2', 'stu3']
    for(var i=0;i<names.lenght;i++){
        console.log(i, names[i])
    }

    2.6 异常处理

    在JavaScript的异常处理中有两个注意事项:

    • 主动抛异常 throw “xx” 或 throw Error({code:1000,error:’错了’})
    • catch只能破获一次,如果想要对异常精细化处理可以在catch代码块中再做类型判断。
    try {
        //这段代码从上往下运行,其中任何一个语句抛出异常该代码块就结束运行
        var name = ''
    }
    catch (e) {
        // 如果try代码块中抛出了异常,catch代码块中的代码就会被执行。
        // e是一个局部变量,用来指向Error对象或者其他抛出的对象
    }
    finally {
        // 无论try中代码是否有异常抛出(甚至是try代码块中有return语句),finally代码块中始终会被执行。
    }

    2.7 函数

    2.7.1 变量与函数的预解析

    • JavaScript解析过程分为两个阶段,先是编译阶段,然后执行阶段,在编译阶段会将function定义的函数提前,并且将var定义的变量声明提前,将它赋值为undefined

    2.7.2 函数类型

    1)普通函数

    function func(arg){
        return arg + 1;
    }

    2)匿名函数

    • 定义的函数可以不给名称,这个叫做匿名函数
    • 可以将匿名函数直接赋值给元素绑定的事件来完成匿名函数的调用。
    <script type="text/javascript">
    
    window.onload = function(){
        var oBtn = document.getElementById('btn1');
        /*
        oBtn.onclick = myalert;
        function myalert(){
            alert('ok!');
        }
        */
        // 直接将匿名函数赋值给绑定的事件
    
        oBtn.onclick = function (){
            alert('ok!');
        }
    }
    
    </script>

    3)自执行函数

    (function(arg){
        console.log(arg);
    })('hgzero')

    2.7.3 函数return关键字

    函数return关键字的作用:

    • 返回函数执行的结果
    • 结束函数的运行
    • 阻止默认行为
    <script type="text/javascript">
    function add(a,b){
        var c = a + b;
        return c;
        alert('here!');
    }
    
    var d = add(3,4);
    alert(d);  //弹出7
    </script>

    2.8 json序列化

    • json序列化功能,即:将对象和字符串之间进行转换
    • 网络中数据传输本质上是基于字符串进行,如果想要把一个js的对象通过网络发送到某个网站,就需要对对象进行序列化然后发送

    1)JSON.stringify(object) ,序列化

    var info = {name:'alex',age:19,girls:['钢弹','铁锤']}
    var infoStr = JSON.stringify(info)
    console.log(infoStr)  # 输出结果为: '{"name":"alex","age":19,"girls":["钢弹","铁锤"]}'

    2)JSON.parse(str),反序列化

    var infoStr = '{"name":"alex","age":19,"girls":["钢弹","铁锤"]}'
    var info = JSON.parse(infoStr)
    console.log(info)

    3. DOM

    • 文档对象模型(Document Object Model,DOM)是一种用于HTML编程接口
    • DOM相当于是一个模块,提供了关于HTML文档中对标签进行操作的功能,JavaScript结合DOM可以对HTML中的标签进行操作

    3.1 节点自身属性

    console.log(ele.nodeName);   // 节点名称
    console.log(ele.nodeType);   // 节点类型
    console.log(ele.nodeValue);  // 节点值
    console.log(ele.innerHTML);  // 节点中的文本,包括标签
    console.log(ele.innerText);  // 只获取节点中的文本信息

    3.2 查找节点

    1)直接查找

    document.getElementById(arg)             // 根据ID获取一个标签对象
    document.getElementsByClassName(arg)     // 根据class属性获取标签对象集合
    document.getElementsByName(arg)          // 根据name属性值获取标签对象集合
    document.getElementsByTagName(arg)       // 根据标签名获取标签对象集合

    2)间接查找

    var tag = document.getElementById(arg);
    tag.parentElement           // 找当前标签对象的父标签对象
    tag.children                // 找当前标签对象的所有子标签对象
    tag.firstElementChild       // 找当前标签对象的第一个子标签对象
    tag.lastElementChild        // 找当前标签对象最后一个子标签对象
    tag.nextElementtSibling     // 找当前标签对象下一个兄弟标签对象
    tag.previousElementSibling  // 找当前标签对象上一个兄弟标签对象

    3.3 操作元素属性

    1)属性写法

    • html的属性和js里面属性写法一样
    • “class” 属性写成 “className”
    • “style” 属性里面的属性,有横杠的改成驼峰式,比如:“font-size”,改成”style.fontSize”

    2)操作属性的方法

    • “.” 操作,无法引入变量
      <script type="text/javascript">
          window.onload = function(){
              var oInput = document.getElementById('input1');
              var oA = document.getElementById('link1');
              // 读取属性值
              var val = oInput.value;
              var typ = oInput.type;
              var nam = oInput.name;
              var links = oA.href;
              // 写(设置)属性
              oA.style.color = 'red';
              oA.style.fontSize = val;
          }
      </script>
      ...
      <input type="text" name="setsize" id="input1" value="20px">
      <a href="http://cnblogs.com/hgzero" id="link1">Pray</a>
    • “[ ]”操作,可以引入变量
      <script type="text/javascript">
          window.onload = function(){
              var oInput1 = document.getElementById('input1');
              var oInput2 = document.getElementById('input2');
              var oA = document.getElementById('link1');
              // 读取属性
              var val1 = oInput1.value;
              var val2 = oInput2.value;
              // 写(设置)属性
              // oA.style.val1 = val2; 没反应,因为点 . 方式无法引入变量
              oA.style[val1] = val2;        
          }
      </script>
      ...
      <input type="text" name="setattr" id="input1" value="fontSize">
      <input type="text" name="setnum" id="input2" value="30px">
      <a href="http://cnblogs.com/hgzero" id="link1">Pray</a> 

    3.4 文本操作

    对标签内部文本进行操作时,可以通过 innerText 和 innerHTML来进行:

    • innerText
      • 标签对象.innerText,读取标签内容(仅文本)。
      • 标签对象.innerText="wu",修改标签内容(仅文本)。
    • innerHTML
      • 标签对象.innerHTML,读取标签内容(含标签)。
      • 标签对象.innerText="<a href='#'>wu</a>",修改标签内容(可标签、课文本)

    3.5 class属性操作

    DOM中主要提供了三个帮助操作class属性值的功能:

    • 标签对象.className
      • class属性对应的值直接操作
    • 标签对象.classList.remove(cls)
      • class属性对应值删除某个样式
    • 标签对象.classList.add(cls)
      • class属性中添加样式

    3.6 事件

    DOM中可以为标签设置事件,给指定标签绑定事件之后,只要对应事件被触发,就会执行对应代码

    常见的事件:

    • onclick,单击时触发事件
    • ondblclick,双击触发事件
    • onchange,内容修改时触发事件
    • onfocus,获取焦点时触发事件
    • onblur,失去焦点触发事件
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <script>
            window.onload = function () {        // 这里的window.onload代表等页面全部加载完毕后才加载这里的函数
                var ele = document.getElementsByClassName("div1")[0];
                console.log(ele.innerHTML);
            }
        </script>
    </head>
    <body>
    <body onload="f1()">                         <!-- 这样也可以等页面全部加载完毕后再执行这里的f函数 -->
    <input type="text" id="search" value="请输入用户名" onfocus="f1()" onblur="f2()"> <!-- 获取焦点和失去焦点 -->
    <script>
        var ele = document.getElementById("search");
        function f1() {
            if(ele.value=="请输入用户名"){
             ele.value="";
            }
        }
        function f2() {
            if(!ele.value.trim()){
                ele.value = "请输入用户名";
            }
        var ele = document.getElementById("p1");
            ele.onclick = function () {
                alert(123);
            }
        }
        // 注意:JavaScript中的this代指的是标签本身, 如 onclick = func(this) ,将这个点击事件的标签本身传入到函数中
    </script>
    </body>
    </html>

    使用案例

    3.7 DOM节点的增删改查

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .div1,.div2,.div3,.div4{
                width: 300px;
                height: 250px;
            }
            .div1{
                background-color: green;
            }
            .div2{
                background-color: red;
            }
            .div3{
                background-color: yellow;
            }
            .div4{
                background-color: blue;
            }
        </style>
    </head>
    <body>
        <div class="div1">
            <button onclick="add()">add</button>
            hello div1
        </div>
        <div class="div2">
            <button onclick="del()">del</button>
            hello div2
        </div>
        <div class="div3">
            <button onclick="change()">change</button>
            <p>hello div3</p>
        </div>
        <div class="div4">hello div4</div>
        <script>
            function add() {
                var ele = document.createElement("p");   // 创建一个p标签
                ele.innerHTML="hello p";
                var father=document.getElementsByClassName("div1");
                father.appendChild(ele);
            }
            function del() {
                var father = document.getElementsByClassName("div1")[0];
                var sons = father.getElementsByTagName("p")[0];
                father.removeChild(sons);                // 删除一个子标签(是通过父节点来调用的)
            }
            function change() {
                var img = document.createElement("img"); // 创建一个img标签
    
                img.setAttribute("src" , "image.jpg");   // 这是DOM下的语法,设置src为image.jpg,同下
                img.src = "image.jpg";                   // 设置这个img标签的路径
    
                var ele = document.getElementsByTagName("p")[0]; // 找到div3中的p标签
                ele.style.color = "red";                         // js来改变css参数
    
                var father = document.getElementsByClassName("div3")[0];
    
                father.replaceChild(img, ele);           // 将ele替换成img
            }
    
            var ele = document.getElementsByName("div")[0];
    
            console.log(ele.className);
            console.log(ele.classList[0]);  // 取出ele节点的class名字的列表
            console.log(ele.className[1]);
            console.log(ele.className);
        </script>
    </body>
    </html>

    4. BOM

    • BOM(Browser Object Model)是指浏览器对象模型,通过他,可以操作浏览器相关的功能
    • BOM相当于是一个模块,提供了关于浏览器操作的功能

    4.1 提示框

    • alert,提示框
    • confirm,确认框
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset='utf-8'/>
        <title>BOM</title>
    </head>
    <body>
    <input type="button" value="提示框" onclick="showAlert();">
    <input type="button" value="确认框" onclick="showConfirm();">
    <script type="text/javascript">
        function showAlert() {
            alert('震惊了..');
        }
    
        function showConfirm() {
            // 显示确认框
            // result为true,意味着点击了确认
            // result为false,意味着点击了取消
            var result = confirm('请确认是否删除?');
            console.log(result);
        }
    </script>
    </body>
    </html>

    4.2 浏览器URL

    • location.href
      • 获取当前浏览器URL
    • location.href = "url"
      • 设置URL,即:重定向
    • location.reload()
      • 重新加载,即:刷新页面
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset='utf-8'/>
        <title>BOM</title>
    </head>
    <body>
    <input type="button" value="获取当前URL" onclick="getUrl();">
    <input type="button" value="重新加载页面" onclick="reloadPage();">
    <input type="button" value="重定向到百度" onclick="redirectToBaidu();">
    <script type="text/javascript">
        function getUrl() {
            console.log(location.href);
        }
        function reloadPage() {
            location.reload();
        }
        function redirectToBaidu() {
            location.href = "http://www.baidu.com";
        }
    </script>
    </body>
    </html>

    4.3 定时器

    • setInterval(function(){},1000)
      • 创建多次定时器
    • clearInterval(定时器对象)
      • 删除多次定时器
    • setTimeout(function(){},1000)
      • 创建单次定时器
    • clearTimeout(定时器对象)
      • 删除单次定时器
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset='utf-8'/>
        <title>BOM</title>
    </head>
    <body>
    <h1>计时器:<span id="time"></span></h1>
    <input type="button" value="开始计时" onclick="start();">
    <input type="button" value="停止计时" onclick="stop();">
    <script type="text/javascript">
        var time;
        function start() {
            time = 0;
            document.getElementById('time').innerText = time;
            interval = setInterval(function () {
                time += 1;
                document.getElementById('time').innerText = time;
            }, 1000);
        }
        function stop() {
            clearInterval(interval)
        }
    </script>
    </body>
    </html>

    5. 封闭函数&闭包

    封闭函数是javascript中匿名函数的另外一种写法,创建一个一开始就执行而不用命名的函数

    5.1 封闭函数的定义和执行

    1)一般函数的定义和执行

    function changecolor(){
        var oDiv = document.getElementById('div1');
        oDiv.style.color = 'red';
    }
    changecolor();

    2)封闭函数

    (function(){
        var oDiv = document.getElementById('div1');
        oDiv.style.color = 'red';
    })();

    3)还可以在函数定义前加上“~”和“!”等符号来定义匿名函数

    !function(){
        var oDiv = document.getElementById('div1');
        oDiv.style.color = 'red';
    }()

    5.2 闭包

    5.2.1 什么是闭包

    • 函数嵌套函数,内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制收回
    function aaa(a){      
          var b = 5;      
          function bbb(){
               a++;
               b++;
             alert(a);
             alert(b);
          }
          return bbb;
      }
     var ccc = aaa(2);
     ccc();
     ccc();

    5.2.2 闭包的作用

    1)将一个变量长期驻扎在内存当中,可用于循环中存索引值

    <script type="text/javascript">
        window.onload = function(){
            var aLi = document.getElementsByTagName('li');
            for(var i=0;i<aLi.length;i++)
            {
                (function(i){
                    aLi[i].onclick = function(){
                        alert(i);
                    }
                })(i);
            }
        }
    </script>
    ......
    <ul>
        <li>111</li>
        <li>222</li>
        <li>333</li>
        <li>444</li>
        <li>555</li>
    </ul>

    2)私有变量计数器,外部无法访问,避免全局变量的污染

    <script type="text/javascript">
        window.onload = function(){
            var aLi = document.getElementsByTagName('li');
            for(var i=0;i<aLi.length;i++)
            {
                (function(i){
                    aLi[i].onclick = function(){
                        alert(i);
                    }
                })(i);
            }
        }
    </script>
    ......
    <ul>
        <li>111</li>
        <li>222</li>
        <li>333</li>
        <li>444</li>
        <li>555</li>
    </ul>

    6. 面向对象

    6.1 面向过程与面向对象编程

    • 面向过程:
      • 所有的工作都是现写现用
    • 面向对象:
      • 是一种编程思想,许多功能事先已经编写好了,在使用时,只需要关注功能的运用,而不需要这个功能的具体实现过程

    6.2 JavaScript对象

    • 将相关的变量和函数组合成一个整体,这个整体叫做对象,对象中的变量叫做属性,变量中的函数叫做方法
    • javascript中的对象类似字典

    6.3 创建对象的方法

    1)单体

    <script type="text/javascript">
    var Tom = {
        name : 'tom',
        age : 18,
        showname : function(){
            alert('我的名字叫'+this.name);    
        },
        showage : function(){
            alert('我今年'+this.age+'岁');    
        }
    }
    </script>

    2)工厂模式

    <script type="text/javascript">
    function Person(name,age,job){ var o = new Object(); o.name = name; o.age = age; o.job = job; o.showname = function(){ alert('我的名字叫'+this.name); }; o.showage = function(){ alert('我今年'+this.age+'岁'); }; o.showjob = function(){ alert('我的工作是'+this.job); }; return o; } var tom = Person('tom',18,'程序员'); tom.showname(); </script>

    3)构造函数

    <script type="text/javascript">
        function Person(name,age,job){            
            this.name = name;
            this.age = age;
            this.job = job;
            this.showname = function(){
                alert('我的名字叫'+this.name);    
            };
            this.showage = function(){
                alert('我今年'+this.age+'岁');    
            };
            this.showjob = function(){
                alert('我的工作是'+this.job);    
            };
        }
        var tom = new Person('tom',18,'程序员');
        var jack = new Person('jack',19,'销售');
        alert(tom.showjob==jack.showjob);
    </script>

    4)原型模式

    <script type="text/javascript">
        function Person(name,age,job){        
            this.name = name;
            this.age = age;
            this.job = job;
        }
        Person.prototype.showname = function(){
            alert('我的名字叫'+this.name);    
        };
        Person.prototype.showage = function(){
            alert('我今年'+this.age+'岁');    
        };
        Person.prototype.showjob = function(){
            alert('我的工作是'+this.job);    
        };
        var tom = new Person('tom',18,'程序员');
        var jack = new Person('jack',19,'销售');
        alert(tom.showjob==jack.showjob);
    </script>

    5)继承

    <script type="text/javascript">
    
            function fclass(name,age){
                this.name = name;
                this.age = age;
            }
            fclass.prototype.showname = function(){
                alert(this.name);
            }
            fclass.prototype.showage = function(){
                alert(this.age);
            }
            function sclass(name,age,job)
            {
                fclass.call(this,name,age);
                this.job = job;
            }
            sclass.prototype = new fclass();
            sclass.prototype.showjob = function(){
                alert(this.job);
            }
            var tom = new sclass('tom',19,'全栈工程师');
            tom.showname();
            tom.showage();
            tom.showjob();
        </script>
  • 相关阅读:
    C#不显示在任务栏
    打开文件,文件夹
    C#文本操作
    C#路径2
    C#当前程序路径获取
    HDU 5155 Harry And Magic Box dp
    POJ 1971 Parallelogram Counting
    CodeForces 479C Exams 贪心
    CodeForces 508E Arthur and Brackets 贪心
    CodeForces 483B 二分答案
  • 原文地址:https://www.cnblogs.com/hgzero/p/13262144.html
Copyright © 2020-2023  润新知