美文网首页JavaScript大全
Javascript类函数中prototype与this的区别

Javascript类函数中prototype与this的区别

作者: nummycode | 来源:发表于2016-04-17 12:50 被阅读247次

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

  • 通过this变量定义
  • 通过prototype定义
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定义的方法,而且应该定义在构造函数外部。

相关文章

  • Javascript类函数中prototype与this的区别

    在Javascript面向对象编程中,定义实例方法主要有两种: 通过this变量定义 通过prototype定义 ...

  • javascript中的原型

    javascript 中的原型 javascript 中,每个函数都可以有属性,prototype 就是每个函数都...

  • JavaScript原型与原型链

    一、prototype 在JavaScript中,每个函数都有一个prototype属性,这个属性指向函数的原型对...

  • 再学JS--原型与原型链

    prototype 在JavaScript中,每一个函数都有一个prototype属性,且prototype属性是...

  • 原型链的说法

    在JavaScript中,每当定义一个函数数据类型(普通函数、类)时候,都会天生自带一个prototype属性,这...

  • 2018-11-22

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。 构造函数...

  • 22

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。 构造函数...

  • 面向对象2

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。 构造函数...

  • OOP-2

    JavaScript的面向对象是基于constructor(构造函数)与prototype(原型链)的。 构造函数...

  • JavaScript面向对象(三)

    prototype 属性 在 JavaScript 中,每个对象的构造函数都有一个 prototype 属性。该属...

网友评论

    本文标题:Javascript类函数中prototype与this的区别

    本文链接:https://www.haomeiwen.com/subject/qmuolttx.html