Javascript:复制的变量和原型
Javascript: Copied Variables and Prototypes
好的,所以Javascript是一种'原型'语言,据我所知,这意味着它具有这样的东西:
var c = document.getElementById('myCanvas');
c.ctx = c.getContext('2d');
现在,如果我这样做:
var c = document.getElementById('myCanvas');
c.ctx = c.getContext('2d');
c = document.getElementById('newCanvas');
c.ctx 是否会在影响全新画布的同时保留并发挥作用? 谢谢!
我的实验说不,但我问是因为也许我错过了什么。 如果理论上这不应该奏效,你有什么好的方法可以相对容易地绕过它吗? (或者不那么容易,但容易当然是偏好!
c.ctx
会在影响全新画布的同时保留并发挥作用吗?
不,您正在为c
创建一个全新的参考。
所以Javascript是一种"原型"语言
那为什么不在原型中定义你想要什么呢?
Object.defineProperty(
HTMLCanvasElement.prototype,
'ctx',
{
'get': function () { return this.getContext('2d'); },
'configurable': true
}
);
现在,所有<canvas>
元素在通过其 DOM 接口访问时都将具有一个属性 ctx,该属性获取其上下文。
如果您对缓存的上下文感到满意,则可以改用它
function () { return this.ctx = this.getContext('2d'); }
这会在实例上设置一个新属性,该属性隐藏原型的 getter。
当你分配这个:
c = document.getElementById('newCanvas');
您将整个 c
变量替换为对新对象的引用。 不会保留前一个c
对象的先前属性。
在你的代码中
var c = document.getElementById('myCanvas');
c.ctx = c.getContext('2d');
c = document.getElementById('newCanvas');
在最后一行,你只是覆盖了 c 变量。
你可以把它想象成运行这个
var c = document.getElementById('myCanvas');
c.ctx = c.getContext('2d');
c = 3;
假设您编写的代码确实意味着什么:不过您很幸运,ctx 内置了一个画布引用(它与您想要的相反,但这是相同的交易)
ctx.canvas;
相关文章:
- 引用类变量中的原型方法
- 为什么原型允许多个实例共享变量
- 创建所有原型函数均可访问的局部变量
- 如何使用Javascript扩展对象'的原型使用声明中的变量
- 原型Javascript中的错误“;类别“-不是函数和未定义的变量
- 使变量继承现有原型的方法
- 揭示原型模式私有变量
- 为什么允许通过原型继承访问另一个闭包范围内的私有变量
- 使用原型模拟静态变量
- 使用原型访问局部变量
- 由于变量范围,requireJS丢失了原型
- 声明有和没有原型的变量有什么区别
- Javascript:复制的变量和原型
- 如何在嵌套原型中访问 JavaScript 构造函数变量
- AngularJS ng-models使用中继器中的原型变量
- 从 JavaScript 动画对象原型设置变量
- JavaScript原型变量创建引用
- 是否可以全局访问原型变量?
- 从第一个对象创建的另一个对象中访问对象原型变量
- 是什么导致原型变量在使用“for in”时显示