前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Javascript类函数中prototype与this的区别

Javascript类函数中prototype与this的区别

作者头像
用户2936342
发布2018-08-27 15:26:23
8430
发布2018-08-27 15:26:23
举报
文章被收录于专栏:nummynummy

在Javascript面向对象编程中,定义实例方法主要有两种:

  • 通过this变量定义
  • 通过prototype定义
代码语言:javascript
复制
function Student(name){
    var name = name;
    function privateFunc(){
        console.log("This is a private fucntion");
    }
    this.showName = function(){
        privateFunc();
        console.log(name);
    }
    
}
Student.prototype.protoFunction = function(){
        //console.log(name);
        privateFunc();
}

var stu = new Student("Jim")
stu.showName();
stu.protoFunction();

通过this与prototype定义的方法有什么区别呢? 运行以上代码可以发现,showName方法可以访问类函数中的定义的变量与方法,而protoFunction只能访问showName方法。 如果将protoFunctionin定义在构造函数内部,就可以访问这些属性和方法了。但作为实例函数,如果定义在构造函数内部,每次实例化都要执行,显然在浪费内存,也不合理。 有些资料上把this.showName这类方法叫做特权方法,主要是为了访问内部的私有字段,这样就可以控制对某些字段的访问。 而protoFunction这类方法相当于类的实例方法,但能访问这些特权方法,间接访问私有字段。

结论: 如果要直接访问私有字段,应该使用特权方法,也就是this定义的方法,应该定义在构造函数内部。相反,如果不需要直接访问私有字段,应该使用prototype定义的方法,而且应该定义在构造函数外部。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.04.17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档