构造函数和成员函数

来源:互联网 发布:网络攻防教育培训 编辑:程序博客网 时间:2024/05/16 15:54

1.对象-成员函数(方法)
比如:我们希望对象不但有属性,还希望它有行为(行为在程序中要靠函数来体现)
(1)添加speak函数,输出我是一个好人;
(2)添加jisuan函数,可以计算从1+…+1000的结果
(3)修改jisuan函数,该方法可以接收一个数n,计算从1+…+n的结果
(4)添加add成员函数,可以计算两个数的和

function Person(name,age){//这个就是使用传入的实际参数,初始化属性this.name=name;this.age=age;//输出自己的名字,这里this.show就是一个公开的函数,函数名是showthis.show=function(){document.write("名字="+this.name);}//添加jisuan函数,可以计算从1+...+1000的结果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("res="+p1.jisuan(10));

2.给一个对象添加(指定)函数的几种方式
(1)方式一

function Person(){this.name="abc";this.age=900; this.abc=function show1(){window.alert("hello"+this.name);}}var p1=new Person(); //创建一个p1对象p1.abc(); //调用

(2)方式二

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

思考:window.alert(p1.abc)和window.alert(show1)会输出什么?
都会输出函数:

function show1(){window.alert("hello"+this.name);}

(3)方式三

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

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

function Dog(){}//使用prototype类去绑定一个函数给shoutDog.prototype.shout=function(){window.alert("小狗");}var dog1=new Dog();dog1.shout();var dog2=new Dog();dog2.shout();

代码原理说明:这里写图片描述

注意:==号的作用:
(1)当==的两边都是字符串的时候,则比较内容相等否。
(2)如==两边是数字,则数的大小是否相等。
(3)如==是对象或者是对象函数,则比较地址是否相等。

3.针对以下案例输出是什么?
(1)案例一

function Person(){this.name="abc1";this.age=900; }function show1(){window.alert("hello"+this.name);//这个this指window,此时this.name为空}var p1=new Person(); p1.abc=show1; show1();

输出 hello空格;

(2)案例二

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

输出hello北京;

(3)案例三

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("北京","天津");

第一个输出abc 900 undefined undefined;
第二个输出abc 900 北京 天津;

(4)

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.name会代替this.namep1.abc();p1.abc("北京","天津");

输出中国 900 北京 天津;

原创粉丝点击