zoukankan      html  css  js  c++  java
  • JS面向(基于)对象编程--构造方法(函数)

       构造函数(方法)介绍

       什么是构造函数呢?在回答这个问题之前,我们来看一个需求:前面我们在创建人类的对象时,是先把一个对象创建好后,再给他的年龄和姓名属性赋值,如果现在我要求,在创建人类的对象时,就直接指定这个对象的年龄和姓名,该怎么做?

       构造函数(方法)是一种特殊的方法,它的主要作用是完成对对象实例的初始化。它有几个特点:

    1. 构造函数(方法)名和类名相同。

    2. 在创建一个对象实例时,系统会自动的调用该类的构造方法完成对新对象的初始化。

       构造函数基本用法

    function 类名(参数列表){
        属性=参数值;//不带this为私有,带有this为共有。
    }

       如下例:

    function Person(name, age) {
        this.name = name;//this指代当前对象(即实例化的对象)
        this.age = age;
    }
    //创建Person对象的时候,就可以直接给名字和年龄
    var p1 = new Person("abc", 80);
    var p2 = new Person("hello", 9);
    window.alert(p2.name);

       当然,在给一个对象初始化属性值的时候,也可以指定函数属性。如下例:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>构造函数</title>
        <script type="text/javascript">
            function jiSuan(num1, num2, oper) {
                if(oper == "+") {
                    return num1+num2;
                } else if(oper == "-") {
                    return num1-num2;
                } else if(oper == "*") {
                    return num1*num2;
                } else if(oper == "/") {
                    return num1/num2;
                }
            }
    
            function Person(name, age, fun) {
                this.name = name;
                this.age = age;
                this.myFun = fun;
            }
            var p1 = new Person("aa", 9, jiSuan);
            var p2 = new Person("aa", 9, null);
            // window.alert(p1.name);
            // window.alert(p1.myFun(89, 90, "+"));
            window.alert(p2.myFun(1, 2, "*"));//Uncaught TypeError: p2.myFun is not a function
        </script>
    </head>
    <body>
        
    </body>
    </html>

       构造方法(函数)小结

    1. 构造方法名和类名相同

    2. 主要作用是完成对新对象实例的初始化

    3. 在创建对象实例时,系统自动调用该对象的构造方法   

       类定义的完善:

       在介绍了构造函数(方法)后,我们类(原型对象)的定义就可以完善一步:

    function 类名() {
        属性;
    }

       ↓

    function 类名() {
        属性;
        函数(方法);  
    }

       ↓

    function 类名(参数1, 参数2, ...) {
        属性 = 参数1;
        函数(方法) = 参数2;  
    }

       

       

       面向对象编程进一步认识:

       创建对象的又一种形式

       1、对于比较简单的对象,我们也可以这样来创建(可以指定普通属性和函数属性),如:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>构造函数</title>
        <script type="text/javascript">
            var dog = {name:"小狗",
                        age:8, 
                        fun1:function(){window.alert("hello,world");},
                        fun2:function(){window.alert("ok");}
                       };
             window.alert(dog.constructor);
             window.alert(dog.name+dog.age);
             dog.fun1();
             dog.fun2();
        </script>
    </head>
    <body>
        
    </body>
    </html>

       2、有时,会看到这样一种调用方法:

    函数名.call(对象实例);

       例,

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>构造函数</title>
        <script type="text/javascript">
            var dog={name:'hello'};
            function test(){
                window.alert(this.name);
            }
            test();
            window.test();
            var name = "阿昀";
            //test.call(window);//输出阿昀
            test.call(dog); // <==> dog.test();
        </script>
    </head>
    <body>
        
    </body>
    </html>

       3、for...in,如:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>构造函数</title>
        <script type="text/javascript">
            var dog = {name:'小名',
                       sayHello:function(a,b){window.alert("结果="+(a+b));}
                      };
            //循环列出dog对象的所有属性和方法 对象名['属性名']
            for(var key in dog){
                window.alert(dog[key]);
            }
        </script>
    </head>
    <body>
        
    </body>
    </html>

       记住:可以使用该形式—对象名['属性名']—访问该对象中的属性和方法。

       又如:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>构造函数</title>
        <script type="text/javascript">
            document.writeln("****当前浏览器window对象有属性和方法****<br/>");
            for(var key in window){
                document.writeln(key+":"+window[key]+"<br>");
            }
        </script>
    </head>
    <body>
        
    </body>
    </html>

      

  • 相关阅读:
    Head First设计模式-单例模式
    mahout算法源码分析之Itembased Collaborative Filtering(四)共生矩阵乘法
    “非常PHP学习网”(www.veryphp.cn)一期上线
    IOS深入学习(19)之View object
    POJ 1005(累加)
    Plan04.学习与提升
    一个python
    【tcl脚本】改变输出字符格式
    为什么寄存器比内存快?
    我觉得epoll和select最大的区别
  • 原文地址:https://www.cnblogs.com/yerenyuan/p/5393212.html
Copyright © 2011-2022 走看看