构造函数函数闭包变量
constructor function closure variable
对于下面的函数,我希望a和b有自己的数组版本,因此希望输出为false,但输出为true。谁能解释一下,为什么?
function Test() {
var a = [1,2,3];
Test.prototype.getArray = function() { return a; };
}
var a = new Test();
var b = new Test();
console.log(a.getArray() === b.getArray());
每个Test
对象都继承相同的原型。完全相同的原型。由于您正在覆盖原型函数,因此它将覆盖该类型的所有对象。
示例:
function log(msg) {
document.querySelector('pre').innerText += msg + ''n';
}
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
log('Hello, ' + this.name);
};
var bob = new Person('Bob');
var alice = new Person('Alice');
bob.sayHello();
alice.sayHello();
// Overwriting the prototype function
Person.prototype.sayHello = function() {
log('Goodbye, ' + this.name);
};
bob.sayHello();
alice.sayHello();
<pre></pre>
如果您绝对需要使用标准构造函数访问函数中的私有数据,则需要在构造函数本身中定义函数。
function Test() {
var a = [1,2,3];
this.getArray = function() {
return a;
};
}
请注意,在许多实现中,这会否定您从原型继承中获得的大量空间和性能优化。
相关文章:
- 子类访问父类's闭包变量
- 构造函数函数闭包变量
- 如何冻结函数's在闭包中的变量
- 使变量可用于不带闭包的异步调用
- 局部变量在闭包中丢失
- 其中是闭包中存储的变量-堆栈或堆
- javascript闭包:保护内部变量
- Javascript:附加字符串中的事件,闭包中的变量求值
- "可变变量可从闭包“”访问;在传递给Array.prototype.every的函数中
- JavaScript闭包和变量引用
- 如果全局上下文中的变量是属性,那么为了闭包的目的,如何区分它们
- 如何访问闭包中的变量
- 闭包中的本地变量从外部更改.这是一个javascript错误,或者我做错了什么
- 使用JavaScript回调函数了解变量作用域和闭包
- 递增并存储一个“;私人的“;使用闭包的变量
- 循环和局部变量内部的闭包
- 未使用JS闭包将变量传递给onClick函数
- 函数变量闭包
- 陷入javascript变量闭包
- 用具体的例子理解Javascript中的私有变量(闭包?)