gpt4 book ai didi

javascript - 如果包含一个变量,并且一个实例设置了一个具有相同名称的属性,那么该属性到哪里去了?

转载 作者:行者123 更新时间:2023-11-30 17:19:42 25 4
gpt4 key购买 nike

我们大多数人都知道 JavaScript 没有“私有(private)”属性的概念,但是可以通过使用闭包来模拟这种行为:

var Car = function () {
var name = 'Tesla';
var wheelCount = 4;

this.getName = function () {
return name;
};
this.getWheelCount = function () {
return wheelCount;
};
this.setName = function (newName) {
name = newName;
};
this.setWheelCount = function (newCount) {
wheelCount = newCount;
};
};

var myCar = new Car();
console.log(myCar.name); // undefined

对于了解 JavaScript 闭包工作原理的我们来说,这一切都很有意义。但是,以下将起作用:

myCar.name = 'Corvette';
console.log(myCar.name); // 'Corvette'

但是如果你从原型(prototype)调用函数,封闭的变量仍然被使用

console.log(myCar.getName()); // 'Tesla'

当您调用 myCar.name 时,您正在向对象添加一个新属性。这只是使用 this 的全部意义吗?在声明 getName 时(等)函数在 Car 中定义以区分封闭的 nameCar里面声明与 myCar.name

我感觉我知道这个问题的答案,但我想确定一下。另外,我认为这对于其他人深入了解 JavaScript 封装的工作原理将是非常宝贵的。

最佳答案

Is it just the entire point of using this when declaring the getName (etc) functions inside the Car definition to make the differentiation between the enclosed name inside the Car declaration versus the myCar.name?

是的。

this(或 myCar)是对象,您可以在其上放置您想要拥有的属性(在本例中为所有那些方法)。如果你想使用属性,你必须使用 property accessor .

var name 只是构造函数中的一个局部变量,可以通过闭包从对象的方法中访问。

或者,回答您的标题问题:

If a variable is enclosed, and an instance sets a property with the same name, where does the property go?

该属性在对象上。它完全不会干扰位于Car 构造函数调用的范围内 的变量。

关于javascript - 如果包含一个变量,并且一个实例设置了一个具有相同名称的属性,那么该属性到哪里去了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25365855/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com