我想出了以下情况:
function Dog () {
"use strict";
this.age = 1;
var name = "Fido";
this.getName = function () { return name; }
}
现在我正在创建“Dog”类的一个新实例并打印变量的值。
var d = new Dog;
document.write('<strong>Dog age:</strong> ' +d.age); \\Outputs "1" as expected
document.write('<br/>');
document.write('<strong>Dog name:</strong> ' +d.name); \\Outputs "undefined" as expected, 'cause it's a private variable.
document.write('<br/>');
document.write('<strong>Get Dog name:</strong> ' +d.getName()); \\Outputs "Fido", as expected.
但是假设我想改变狗的名字,像这样:
d.name = "Stinky";
document.write('<br/>');
document.write('<strong>Dog name Again:</strong> ' +d.name);
document.write('<br/>');
document.write('<strong>Get Dog name Again:</strong> ' +d.getName());
基于此,我有几个问题:
- 为什么“d.name”没有向我显示“未定义”?“名称”不是私有变量吗?我想你不能改变私有变量的值,对吗?我想知道这个过程是否创建了一个新变量,但这次是一个公共变量,并且具有相同的名称。如果是这样,有没有办法防止每次我尝试分配具有相同名称的新属性时创建新变量?有没有办法抛出“类型错误”或其他东西(嗯,这是我所期望的)。
- 最后:为什么“getName”会打印原始值“Fido”,即使我为它分配了一个新值?
有任何想法吗?
这是一个让事情变得更容易的fid。