javascript - 回复:Javascript 关闭。母对象内部的变量如何与母对象相同?
问题描述
我有一个关于公共变量和闭包的问题。在下面的代码中,为什么母对象内部的“temp”变量可以像母对象一样使用?
例如,在以下代码中,如果您键入
console.log(pizzaA.getToppings());
你可以得到“3”
有点令人困惑,因为如果您返回“temp”,它仍然是母对象的属性。所以这意味着,我想我必须输入如下“console.log(pizzaA.temp.getToppings());”
不是吗?
var Pizza = function () {
var crust = 'thin';
var toppings = 3;
var getToppings = function () { return toppings; };
var temp = {};
temp.getToppings = getToppings;
return temp;
};
var pizzaA = new Pizza();
console.log(pizzaA.getToppings());
解决方案
temp
不是实例化对象的属性 - 它是实例化对象本身。当构造函数返回一个对象时,该对象正是调用构造函数的结果被分配给的对象。也就是说,当你这样做
var pizzaA = new Pizza();
比萨有
return temp;
然后temp
对象被分配给pizzaA
. 由于temp
对象有属性getToppings
,可以getToppings
直接调用 on temp
,也可以直接调用 on pizzaA
,因为它们都引用了内存中的同一个对象。
推荐阅读
- flutter - 为什么 Flutter RevenueCat for iOS getOffering null?
- ruby - 如何从红宝石文件中读取/写入哈希?
- python - 如何使用 Python 将 android 设备与 ADB 服务器连接?
- c# - 如何在 C# 中通过 MAPI 阅读 Outlook 电子邮件
- sql - 是否可以从 AWS Athena 中的嵌套 json 对象创建平面表?
- google-cloud-platform - x-googl-acl 没有公开上传的文件
- macos - 如何在 macOS 10.12 中使用 HomeBrew
- typescript - Jest,ts-jest,带有 ES 模块导入的打字稿:找不到模块
- javascript - 按钮上的事件在 vue-datatable 中不起作用
- jmeter - Jmeter 并发和到达线程组设置