javascript对象中的方法问题
大家讲道理
大家讲道理 2017-04-10 15:41:45
[JavaScript讨论组]
function person(firstname,lastname,age,eyecolor) {
    this.firstname=firstname;
    this.lastname=lastname;
    this.age=age;
    this.eyecolor=eyecolor;
 
    this.changeName=changeName;
    function changeName(name) {
        this.lastname=name;
    }
}

var cont="";
myMother=new person("Steve","Jobs",56,"green");
myMother.changeName("Ballmer");

for (var i in myMother){
    cont+=i+":"+myMother[i]+"<br />";
}

document.write(cont);

本人新手,在对JS中的对象方法的调用中对例子产生疑惑,JS中调用方法直接用object.method()就行了,为什么在上面代码中还需要添加这一句代码呢

this.changeName=changeName;

如果把这一句删除了就会显示

myMother.changeName is not a function

为什么需要在person中添加1个changeName 属性才行呢?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(6)
天蓬老师
function person(firstname,lastname,age,eyecolor) {
    this.firstname=firstname;
    this.lastname=lastname;
    this.age=age;
    this.eyecolor=eyecolor;
    //加了这个语句后,声明的函数绑定到new操作符生成的对象的changName属性上,因为有其它变量引用到,故其不会被销毁掉
    this.changeName=changeName;
    //不加this.changeName=changeName;那么只是在person函数内部声明了一个函数,是一个person作用域范围内容的局部变量,而这个函数在person方法被调用后会被销毁掉
    function changeName(name) {
        this.lastname=name;
    }
}

等价写法为

function person(firstname,lastname,age,eyecolor) {
    this.firstname=firstname;
    this.lastname=lastname;
    this.age=age;
    this.eyecolor=eyecolor;
    this.changeName=function(name) {
        this.lastname=name;
    }
}
大家讲道理
function person(firstname, lastname, age, eyecolor) {

    this.firstname = firstname;
    this.lastname = lastname;
    this.age = age;
    this.eyecolor = eyecolor;
    //this.changeName=function(name) {
    //    this.lastname = name;
    // }
}

person.prototype.changeName = function (name) {
    this.lastname = name;
}

var cont = "";
myMother = new person("Steve", "Jobs", 56, "green");
myMother.changeName("Ballmer");
for (var i in myMother) {
    cont += i + ":" + myMother[i] + "<br />";
}
alert(cont)

this.changeName=changeName只是另外一种写法,这里涉及到原型。

JavaScript 不包含传统的类继承模型,而是使用 prototype 原型模型。

PHPz
    function changeName(name)
    {
        this.lastname=name;
    }

相当于在person里面声明了一个私有的方法,只能在person内部可以调用,而this.changeName=changeName;通过this为外部调用changeName架起一座桥梁。所以实例化对象person后就可以调用changeName方法。

大家讲道理

这应该是在申明changeName()这个函数,一般函数的话都得先申明然后才可调用

高洛峰

这个是js的构造函数问题(http://segmentfault.com/a/1190000002983180#articleHeader5)

天蓬老师

你可以将changeName看成是私有属性。那句代码的作用是让对象实例拥有访问私有方法的权限。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号