zoukankan      html  css  js  c++  java
  • JS面向对象基础

    以往写代码仅仅是为了实现特定的功能,后期维护或别人重用的时候,困难很大。

    Javascript作为完全面向对象的语言,要写出最优的代码,需要理解对象是如何工作的。

    1.       对象是javascript的基础,对象是一系列属性的集合,类似其他语言的散列表。

    如下两个创建对象,并实现属性的例子是相同的。

    var obj = new Object();
            //
    给对象Obj设置一系列的属性
            obj.name = "rxm";
            obj.getAge = function()
            { return (new Date()).getFullYear() - 1986; };
            //---------------------------------------
            //
    结合键值对来重写对象
            var obj = {
                name: "rxm",
                getAge: function() { return (new Date()).getFullYear() - 1986; }
            };

    2.       Javascript中,对象本身可以用来创建新对象,对象也可以继承自其他对象,这称为“原型化继承”。

      <script language="javascript" type="text/javascript">

            function User(name) {

                this.name = name;

            }

            var my = new User("rxm");

            var you = new my.constructor("cwr");

            alert(my.name == "rxm"); //true

            alert(typeof my == typeof you); //true

            User("bj"); //对象上下文未设定,默认为window.

            alert(window.name); //bj

    </script>

      1)公共方法

    要实现在每个实例中都用到的公共方法,需了解prototype(原型)属性,这个属性包含了一个对象,此对象可以作为所有新副本的基引用。

    function User(name, age) {

                this.name = name;

                this.age = age;

            }

            User.prototype.getName = function() {

                return this.name;

            }

            User.prototype.getAge = function() {

                return this.age;

            }

            var my = new User("rxm", 27);

            alert(my.getAge()); //每个实例化的对象都可以访问prototype属性添加的属性

            alert(my.getName());

    2)私有方法

      只能有构造函数访问的私有函数的例子:

         function User(name, age) {

                this.name = name;

                this.age = age;

                function getName() {

                    return this.name;

                }

            }

            var my = new User("rxm", 27);

    my.getName(); //调用失败[运行时错误: 对象不支持此属性或方法]

       3)特权方法

          指那些在处理对象私有变量的同时,允许用公共方式访问的方法。

    function User(age) {

                var year = (new Date()).getFullYear() - age;

                this.getAge = function() {

                    return year;

                }

            }

            var my = new User(27);

            alert(my.getAge());//1986

            alert(my.year);//我们无法访问对象的私有属性

       动态生成代码的能力是不能小视的,能够根据运行时生成代码是十分的有用。

       //创建一个新的用户对象,接收一个有许多属性的对象作为参数

            function User(properties) {

            //遍历每一个属性,设置读取器和设置器

                for (var i in properties) {

                    (function(which) {

                        var p = i;

                        which["set" + p] = function(val) {

                            properties[p] = val;

                        }

                        which["get" + p] = function() {

                            return properties[p];

                        }

                    }

                )(this);

                }

            }

            var user = new User({

            name:"rxm",

            age:27 });

        alert(user.name); //没有这么个属性

        alert(user.getname()); //rxm 函数是动态生成的

    alert(user.getage());//27

    4)静态方法,类似C# static

          function Person(name) {

                this.name = name;

                this.getname = function()

                { return "my name is " + this.name; };

            }

            Person.mouth = 1;

            var my = new Person("rxm");

            alert(my.getname());//实例的

        alert(Person.mouth);//静态的

  • 相关阅读:
    hdu6354 杭电第五场 Everything Has Changed 计算几何
    hdu6351 Beautiful Now 杭电第五场 暴力枚举
    牛客多校第六场 J Heritage of skywalkert 随即互质概率 nth_element(求最大多少项模板)
    百度之星资格赛 调查问卷 bitset模板(直接将字符串转化成二进制数组并可以计算出十进制值)
    百度之星资格赛 子串查询 线段树
    牛客多校第五场 F take 期望转化成单独事件概率(模板) 树状数组
    牛客多校第五场 E room 二分图匹配 KM算法模板
    牛客第五场多校 J plan 思维
    idhttp提交post
    centos6.2 shutdown now关机进入单用户模式
  • 原文地址:https://www.cnblogs.com/hometown/p/3204218.html
Copyright © 2011-2022 走看看