为什么用直接声明的方式会报错

img


img

img

如图用 var win=app.win; 的方式声明为什么会报错
而是需要实例化才可以运行
为什么是._win,而不是直接win

app._win只是作为一个参数传递给ext的,直接使用变量声明的话,接收到的只是app._win这个参数,而不是win实例,是没办法进行任何操作的
比如写个简单的例子
我声明了一个函数

function ext(obj) {
  if(obj.type === 'win') {
    return {
        show: show
    }
  }

  function show() {
    alert('系统弹窗')
  }
}

let _win = {type: 'win'}
let win = ext(_win);
win.show()

在这个例子中,我声明的ext函数相当于ext.js中的EXT.window.window函数
ext函数接收了一个参数,这个参数代表了我想调用哪种类型的弹窗
ext函数会根据接收到的这个参数,返回对应的弹出方法
最后使用 ext(_win).show() 的方式就可以调用这个窗口了
如过只是调用 _win的话,相当于调用了 {type: 'win'},这个只是个参数,不能进行任何操作

你这个问题让人怎么回答,为什么是app._win 不是 app.win。
肯定因为上边只有 _win 属性啊
而且前面带下划线的表示内部使用的,不希望外部用

实例化出来的和app._win的类型是不是不一样