• javascript(8)


     
    给对象添加方法还有两种方式:

    第一种:

    function 类名(){

      this.属性;

    }

    var 对象名=new 类名();

    function 函数名(){

      //执行

    }

      对象名.属性名=函数名;//这样就相当于把函数赋给 对象名.属性名,此时这个属性名就表示一个函数。

      对象名.属性名()

    具体案例:

    function Person(){
            this.name="abc";
            this.age=900;
        } 
        function show1(){
            window.alert("hello!"+this.name);
        }
        //创建一个p1对象
        var p1=new Person();
        //把show1函数,给p1.abc
        p1.abc=show1;
        p1.abc();

     

    运行结果是:

    如果代码改成p1.abc=show1(),那么p1.abc接收的就是返回值,而在这里,接收的是undefined.

    第二种:

    对象名.属性名=function(参数列表){

      //代码

    };

    调用

    具体案例:

    function Person(){
            this.name="abc";
            this.age=900;
        }
        var p1=new Person();
        p1.abc=function show1(){
            window.alert("hello "+this.name);
        }
    
        p1.abc();

    运行结果:

    思考题:下面程序会输出什么?

    function Person(){
    		this.name="abc";
    		this.age=900;
    	} 
    	function show1(){
    		window.alert("hello!"+this.name);
    	}
    	//创建一个p1对象
    	var p1=new Person();
    	//把show1函数,给p1.abc
    	p1.abc=show1;
    	//p1.abc();
    
    	window.alert(p1.abc);
    	window.alert(show1);

    运行结果都是:

    这一点在前面的笔记中是有提到过的。

        //var name="北京";
        function Person(){
            this.name="abc";
            this.age=900;
        } 
        function show1(){
            window.alert("hello!"+this.name);
        }
        //创建一个p1对象
        var p1=new Person();
        //把show1函数,给p1.abc
        p1.abc=show1;
        show1();

    运行结果是输出"hello!'

    而加上代码:var name="北京";以后输出结果是"hello!北京"

    js中不是以参数的个数来调用函数的。

    function Person(){
            this.name="abc";
            this.age=900;
            this.abc=function(v1,v2){
                window.alert(this.name+" "+this.age+" "+v1+" "+v2);
            }
        }
    
        var p1=new Person();
        p1.abc();
        p1.abc("北京","天津");
        var p2=new Person();
        p2.abc();
        p2.abc("南京","东京");

    输出:

    function Person(){
    this.age=90;
    name="abc";
    this.show=function(){
    window.alert(name);
    window.alert(this.name);//只有name变为this.name才会输出自己的this.name,否则是未定义的。
    //window.alert(grade);//这句代码会报错
    window.alert(this.grade);
    }
    }

    var p=new Person();
    p.name="hello";
    p.grade=90;
    p.show();

     运行结果是:先输出abc,然后输出hello,最后输出90.

    我觉得p.name="hello"就是新添加类的共有属性。

    加上代码块:

    var p2=new Person();
        p2.show();

    只会输出abc,其他都是输出undefined.

    p.name是可以动态添加属性,但是如果Person类中有this.name的话,就会被替换,如果Person中是name的话就是动态为p对象添加共有属性。

    function Person(){
            this.name="abc";
            this.age=900;
            this.abc=function(v1,v2){
                window.alert(this.name+" "+this.age+" "+v1+" "+v2);
            }
        }
    
        var p1=new Person();
        p1.name="中国";
        p1.abc("北京","天津");

    运行结果:

    p1.ab=function(){
            window.alert("使用对象来动态添加函数");
        }
        p1.ab();

    运行结果:

    栈里放的是对象地址

    堆里放的是对象的信息

    window.alert(p1.abc);输出的是函数abc中的内容。

    代码:

    var p1=new Person();
        p1.name="中国";
        //p1.abc("北京","天津");
        p1.ab=function(){
            window.alert("使用对象来动态添加函数");
        }
        p1.ab();
        var p2=new Person();
        p2.name="中国";
        //window.alert(p1.abc==p2.abc);
        document.writeln(p1.abc);
        document.writeln("<br/>"+p2.abc);
        document.writeln("<br/>");
        document.writeln(p1.abc==p2.abc);

    运行结果是先跳出窗口:

    然后在屏幕上显示:

    var p=new Person();

    var p1=new Person();

    window.alert(p1==p2);输出false.

    现在我所掌握的js中为类添加函数的三种方法

    ①在类声明时直接添加

    ②将函数名直接赋值给对象.属性名

    ③直接用对象.属性名来创建。

    function Dog(){
    
        }
        var dog1=new Dog();
        //动态绑定一个函数给    shot属性
        dog1.shout=function(){
            window.alert("小狗");
        }
    
        dog1.shout();
        var dog2=new Dog();
        dog2.shout();

    最后一条语句会报错。

    类本身是有信息的。

    js不支持把地址打出来。

    有一种为类添加函数的方式,将某个函数绑定到特定类中,并且该类的所有对象共享这个函数。

    function Dog(){
    
        }
        function Person(){
    
        }
    
        //使用prototype去绑定一个函数给shout
        //把函数绑定到一个类中。
        Dog.prototype.shout=function(){
            window.alert("小狗");
        }
        //函数开头使用了Dog.prototype
        var dog1=new Dog();
    
        dog1.shout();
        var dog2=new Dog();
        dog2.shout();//这里ok
    
        /*var p=new Person();
        p.shout();
        var p2=new Person();
        p2.shout();*/

    使用语句Dog.prototype.shout将函数绑定到Dog类中,而使用其他类创建的对象去调用shout时会报错。

    在这种情况下代码:

    window.alert(dog1.shout==dog2.shout);

    输出的是true。

    而代码语句:

    var dog3=new Dog();
    var dog4=new Dog();
    window.alert(dog3==dog4);

    输出结果为false。

    两个属性用双等于也是可以进行地址的判断的。

    而代码块:

    var dog5=dog4;
    window.alert(dog5==dog4);

    输出的结果是true.

    js中为类添加函数的方法:

    ①将函数名赋值给对象名.属性名

    ②直接用对象名.属性名来创建函数

    ③前面的几种方法有一个问题:每个对象独占函数代码,这样如果对象很多,则会影响效率,js设计者给我们提供了另一个方法 原型法:这样多个对象可以共享函数代码

    代码如下:

    function Dog(){
    
        }
        //使用prototype去绑定一个函数给shout
        //把函数绑定到一个类中。
        Dog.prototype.shout=function(){
            window.alert("小狗");
        }
        //函数开头使用了Dog.prototype
        var dog1=new Dog();
    
        dog1.shout();
        var dog2=new Dog();
        dog2.shout();//这里ok

    对代码的原理说明图:

    补讲:== 号的作用

    ①当 == 的两边都是字符串的时候,则比较内容 相等否,如果相等返回true.

    ②如 == 两边是数字,则数的大小是否相等。

    ③如 == 是对象 或者是对象函数,则比较地址是否相等。

    function Person(name,age){
            this.name=name;
            this.age=age;
    
            this.show=function(){
                document.writeln("名字="+this.name);
            }
            this.jisuan=function(n){
                var res=0;
                for(var i=1;i<=n;i++){
                    res+=i;
                }
                return res;
            }
        }
    
        var p1=new Person("宋江",90);
        p1.show();
        document.writeln("<br/>")
        var p2=new Person("林冲",12);
        p2.show();
    
        document.writeln("<br/>"+p1.jisuan(10));
  • 相关阅读:
    hdu 5224 Tom and paper 水题
    2015 UESTC 搜索专题N题 韩爷的梦 hash
    2015 UESTC 搜索专题M题 Palindromic String 马拉车算法
    2015 UESTC 搜索专题K题 秋实大哥の恋爱物语 kmp
    2015 UESTC 搜索专题J题 全都是秋实大哥 kmp
    2015 UESTC 搜索专题F题 Eight Puzzle 爆搜
    2015 UESTC 搜索专题E题 吴队长征婚 爆搜
    2015 UESTC 搜索专题D题 基爷的中位数 二分
    2015 UESTC 搜索专题C题 基爷与加法等式 爆搜DFS
    2015 UESTC 搜索专题B题 邱老师降临小行星 记忆化搜索
  • 原文地址:https://www.cnblogs.com/liaoxiaolao/p/9762185.html
Copyright © 2020-2023  润新知