您的位置:首页 > Web前端 > JavaScript

JavaScript构造函数和普通函数

2016-07-08 15:30 507 查看
构造函数和普通函数在定义时,只有一点差别,即是this,使用了this的即为构造函数,如下
function PT(){
     var name="普通";

     return name;
}
function GZ(){
     this.name="构造";

     return name;
}

[align=left]PT.prototype.sayHello = function () {[/align]
[align=left]        alert( '普通!' );[/align]
[align=left]    }[/align]
[align=left]GZ.prototype.sayHello = function () {[/align]
[align=left]        alert( '构造!' );[/align]
[align=left]    }[/align]
[align=left]
[/align]
   var pt =
new PT();
   var gz =
new GZ();
[align=left]
[/align]
[align=left]通过Chrome调试可以观察到[/align]



[align=left][/align]
[align=left]看到这个的时候,突然觉得这2个东西好像是一样的,仅仅只是其中一个多了name,[/align]
[align=left]所以我先假设了一个结论,普通函数就相当于没有公共属性和公共方法的构造函数![/align]
[align=left]
[/align]
为了验证这个假设,可以先试试将构造函数用调用普通函数那样的方式去调用,比如上面这个PT(),我们一般这样调用
var pt = PT();//普通
用构造函数试试
var gz=GZ();//构造
所以将构造函数当做普通函数用是没有问题的!
那么反过来呢?上面说到普通函数就相当于没有公共属性和公共方法的构造函数!
这里说到了公共属性和公共方法,因为我刚开始学JS,不知道这样的描述正不正确,C#里面叫做属性和方法,我们暂且这样叫吧
我们把上面的函数改造一下

[align=left]  function PT() {[/align]
        var name =
"普通" ;
[align=left]        var age = 10;[/align]
[align=left]
[/align]
[align=left]        var getName=function () {[/align]
[align=left]            alert(name);[/align]
[align=left]        }[/align]
[align=left]
[/align]
[align=left]        var getAge=function () {[/align]
[align=left]            alert(age);[/align]
[align=left]        }[/align]
[align=left]
[/align]
[align=left]        return name;[/align]
[align=left]    }[/align]
[align=left]
[/align]
[align=left]    function GZ() {[/align]
        this .name =
"构造" ;
[align=left]        var age = 20;[/align]
[align=left]
[/align]
        this .getName=
function () {
[align=left]            alert(name);[/align]
[align=left]        }[/align]
[align=left]
[/align]
[align=left]        var getAge=function () {[/align]
[align=left]            alert(age);[/align]
[align=left]        }[/align]
[align=left]
[/align]
[align=left]        return name;[/align]
[align=left]    }[/align]
[align=left]
[/align]
[align=left]再测试一下[/align]
    var pt =
new PT();
    var gz =
new GZ();

[align=left]    alert("pt:name=" + pt.name +",age=" + pt.age);     //pt:name=undefined,age=undefined[/align]
[align=left]    //pt.getName();     //pt.getNameis not a function[/align]
[align=left]    //pt.getAge();     //pt.getAgeis not a function[/align]
[align=left]    alert("gz:name=" + gz.name +",age=" + gz.age);     //gz:name=构造,age=undefined[/align]
[align=left]    gz.getName();[/align]
    //gz.getAge();
//gz.getAge
is not a function



[align=left][/align]
从上面的结果可以看出和我们之前得出的结论一样,即便是在构造函数里,也不是所有的都能访问。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript 函数