帮忙看下这个变量在面向对象里叫什么?

大伯格
  • 371

帮忙看看下面的js oop代码中 对私有变量、实例变量、静态变量、公共变量诠释的对不对。
另外帮忙看下a变量是什么变量?在oop里叫什么变量?

var Oop = (function () {

  var a = 'A'

  function Oop() {
    // private私有变量
    var _private = 'private'

    // 实例变量
    this.name = 'james'
  }

  vue.prototype = {
    constructor: Oop,
    consoleName: function () { // public公共方法、公有方法
      console.log(this.name)
    }
  }

  Oop.staticFunc = function () { } // static静态方法

  return Oop
})()
回复
阅读 1.7k
4 个回答
xianshenglu
  • 4.4k
✓ 已被采纳
严格来讲,JavaScript 中没有私有成员的概念;所有对象属性都是公有的。不过,倒是有一个私有变量的概念。任何在函数中定义的变量,都可以认为是私有变量,因为不能在函数的外部访问这些变量。

私有变量包括函数的参数、局部变量和在函数内部定义的其他函数。

    var Oop = (function () {
    
      var a = 'A'// 静态私有变量,因为每个 Oop 的实例共享同一个 a
    
      function Oop() {
        // private私有变量,实例变量
        var _private = 'private'    

        this.name = 'james'
      }
    
      Oop.prototype = {//此处应为 Oop 非 vue
        constructor: Oop,
        consoleName: function () { // public公共方法、公有方法
          console.log(this.name)
        }
      }
    
      Oop.staticFunc = function () { } // static静态方法
    
      return Oop
    })()

另外,还有个特权方法

function MyObject(){
//私有变量和私有函数
    var privateVariable = 10;
    function privateFunction(){
        return false;
    }
//特权方法(可以访问私有变量和函数的公有方法)
    this.publicMethod = function (){
        privateVariable++;
        return privateFunction();
    };
}

摘自JavaScript高级程序设计-第3版-中

a这个变量在 java 等编程语言中应该是不存在的,1 他不在Oop里面 所以不算私有变量和实例变量,他也不会被类所调用,也不属于静态变量,更不会被外界调用了
但是可以把 版本信息 作者与逻辑无关的 什么的 存储在a 这种变量中 然后在
return {Oop: Oop, version: a} 这类东西吧

在js中没有实例变量,私有变量啥的,js的变量主要分为全局变量和局部变量,不过变量都有作用域,是用变量的作用域来区分。

xdsnet
  • 7.5k

js中没有私有变量概念,自定义程序中对象属性都是外部可见的。
只能模拟一些私有变量特性,但不完整,比如参考 链接描述

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏