【绘制】HTML5 Canvas 扩展CanvasRenderingContext2D来增加新属性和方法

我的处女作《Canvas系列教程》在我的Github上正在连载更新,希望能得到您的关注和支持,让我有更多的动力进行创作。

教程介绍、教程目录等能在README里查阅。

传送门:https://github.com/827652549/CanvasStudy

介绍

假如未来某一天,Canvas标准又通过了CanvasRenderingContext2D的新属性和方法,我们该考虑如何让浏览器实现这个新属性和新方法。

这里,我们用到prototype。

Object.prototype 属性表示 Object 的原型对象。

对于 CanvasRenderingContext2D也不例外,我们通过CanvasRenderingContext2D.prototype的属性

var canvas = document.getElementById('canvas'),
        context = canvas.getContext('2d');
    //添加新属性
    CanvasRenderingContext2D.prototype.newProperty = '新属性';
    //添加新方法
    CanvasRenderingContext2D.prototype.newFunction = function () {
        console.log('新方法');
    };
    
    //测试新属性
    console.log(context.newProperty);
    //测试新方法
    context.newFunction();

运行后,控制台打印

 所以,通过

CanvasRenderingContext2D.prototype.属性|方法

实现绘图环境对象的扩展。

元编程/猴子补丁

尽管某些开发者认为JavaScript是一门玩具语言(toy language),但事实上,正如上面展示的,它还是很强大的。这节代码所用到的技术有很多种叫法,例如“元编程(metaprogramming)”、“猴子补丁”、“方法覆盖”。意思就是先获取一个对象方法的引用,再重新定义那个方法,在定义新方法的时候有选择地调用原有方法。

你应该注意,尽量不要让自己的“猴子补丁”和未来Canvas规范新加入功能重名,不然会带来很多困扰。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值