Webkit IDL中自定义[命名]属性的获取(Getter)以及设置(Setter)函数

一、自定义命名属性的获取(Getter)以及设置(Setter)函数:

[CustomNamedGetter](i), [CustomNamedSetter](i)

总结: [CustomNamedGetter] 或者 [CustomNamedSetter] 允许你为命名属性的getter或者setter编写自己的绑定函数.

用法如下:

    [
        CustomNamedGetter,
        CustomNamedSetter
    ] interface MichaelNamedGetter {
    };

当Michael.foooooo被执行时,命名的getters定义了它的行为, 这里的foooooooo不是Michael的属性. 当语句"XXX.foooooooo = ..." 执行时,命名的setter定义了它的行为。[CustomNamedGetter] 和 [CustomNamedSetter] 允许你按照如下方式编写自己的绑定:

  • [CustomNamedGetter] in JavaScriptCore:
    You can write custom JSXXX::canGetItemsForName(...) and JSXXX::nameGetter(...) in WebCore/bindings/js/JSXXXCustom.cpp:
    bool JSXXX::canGetItemsForName(ExecState* exec, XXX* impl, const Identifier& propertyName)
    {
        ...;
    }

    JSValue JSXXX::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName)
    {
        ...;
    }
  • [CustomNamedSetter] in JavaScriptCore:
    You can write custom JSXXX::putDelegate(...) in WebCore/bindings/js/JSXXXCustom.cpp:
    bool JSXXX::putDelegate(ExecState* exec, const Identifier& propertyName, JSValue value, PutPropertySlot& slot)
    {
        ...;
    }

二、自定义属性的获取和赋值函数

[Custom](m,a), [CustomGetter](a), [CustomSetter](a)

总结: 他们允许你这样编写绑定代码。

用法: [Custom] 可用于函数和属性. [CustomGetter][CustomSetter]只能用于属性:

    [Custom] void func();
    [CustomGetter, JSCustomSetter] attribute DOMString str;

我们应该尽可能少的使用自定义的绑定代码,因为他们可能有问题。在考虑使用他们之前,你应该慎重思考:我真的需要自定义绑定代码吗?推荐你修改代码生成器而不是自定义绑定代码。

在解释细节之前,让我澄清这些IDL属性之间的关系。

  • [Custom] 修饰于方法,便是你可以编写方法的绑定代码。
  • [CustomGetter] or [CustomSetter] 修饰属性,表示你可以为属性的getter、setter编写自己的代码。

举例:

  • Method:
    interface XXX {
        [Custom] void func(int a, int b);
    };

你可以编写绑定代码:WebCore/bindings/js/JSXXXCustom.cpp:

    JSValue JSXXX::func(ExecState* exec)
    {
        ...;
    }

参考更多例子:WebCore/bindings/js/JSXXXCustom.cpp

  • Attribute getter:
    interface XXX {
        [CustomGetter] attribute DOMString str;
    };

编写绑定代码: WebCore/bindings/js/JSXXXCustom.cpp:

    JSValue JSXXX::str(ExecState* exec) const
    {
        ...;
    }

参考更多例子:WebCore/bindings/js/JSXXXCustom.cpp

  • Attribute setter:
    interface XXX {
        [CustomSetter] attribute DOMString str;
    };

编写绑定代码: WebCore/bindings/js/JSXXXCustom.cpp:

    void JSXXX::setStr(ExecState*, JSValue value)
    {
        ...;
    }

注意: ObjC, GObject,CPP 绑定bindings 不支持自己定义的绑定代码.

时间: 2024-11-04 05:27:42

Webkit IDL中自定义[命名]属性的获取(Getter)以及设置(Setter)函数的相关文章

iOS中自定义UIView(用接口获取Lable和TextFile中的值)

NSArray *arrayText = @[@"用户名",@"密码",@"确认密码",@"手机号",@"邮箱"]; NSArray *placeholders = @[@"请输入用户名",@"请输入密码",@"请确认密码",@"请输入手机号",@"请输入邮箱"]; NSInteger y = 30; for

【Python】字典或者对象类型中键或者属性的获取与存在性判断

# 定义测试用对象A,字典B class A(object): length = 10 B ={"length":10} # 判断对象是否含有某种属性 # 推荐这种方式,更Pythonic try: x = A.lengt except AttributeError: print("does not have {}".format("lengt")) # 这种low一点 if "leng" in dir(A): print(A

CAD编辑器中怎么自定义文字属性样式

想问一下大家在编辑图纸的时候有没有遇到过这样的问题,就是在CAD绘图的时候,要给编辑的图纸中做一下特别的说明,但是CAD编辑器中原有的文字样式部署那么的符合,拿在CAD编辑器中怎么自定义文字属性样式?具体要怎么来进行操作?下面小编就来教教大家具体的操作,有兴趣的朋友可以来看看. 第一步:首先,打开电脑,看一下有电脑上有没有安装CAD编辑器.如果没有在电脑中打开一个浏览器,搜索框中搜索迅捷CAD编辑器,接着点击进入官网,点击下载安装最新版本的CAD编辑器. 第二步:然后在将刚刚安装完成的CAD编辑

Android 中自定义View的初步总结

概述 在开发过程中,经常会遇到系统中提供的控件无法满足产品的设计需求,这时可能就需要考虑使用自定义的View来实现产品的设计细节了.对于自定义View,可以分为两种,一种是自定义控件(继承View),另一种是自定义布局容器(继承ViewGroup),下面就针对自定义控件View的应用进行简单的总结. 自定义View 自定义View时,我们大部分只需要重写两个方法onMeasure(),onDraw().onMeasure()负责对当前View尺寸进行测量,onDraw()负责把当前这个View绘

jquery中html()或text()方法获取或设置p标签的值

html()方法可以用来读取或者设置某个元素中的HTML内容,text()方法可以用来读取或者没置某个元素中的文本内容 html()方法 此方法类似于JavaScript中的innerHTML属性,可以用来读取或者设置某个元素中的HTML内容.要获取某个元素的内容,可以这样: var p_html = $("p").html(); //获取p元素的HTML代码 如果需要设置某元素的HTML代码,那么也可以使用该方法,不过需要为它传递一个参数.例如要设置p元素的HTML代码,可以使用如下

java反射获取对象的属性值和对象属性中的子属性值

近段时间在做web项目,前端使用的是jQuery EasyUI. 为方便需要,准备做一个前端通用的Datagird导出Excel功能,博主也考虑过思路和最终功能,1.前端选中行导出:2.当前页导出:3.当前过滤条件导出. 想偷懒在网上找找已有的代码改改,发现大部分只能满足个别需求,使用JS导出只能满足前端,使用代码才能实现3功能. ...... 好了,说了一堆废话,回归正题,本文是在做通用自定义字段导出时所需要,根据属性名去查找对象和子对象,找到对应属性值,抓取回来放到Excel中. 直接上代码

Android中View自定义XML属性详解以及R.attr与R.styleable的区别

为View添加自定义XML属性 Android中的各种Widget都提供了很多XML属性,我们可以利用这些XML属性在layout文件中为Widget的属性赋值. 如下所示: <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World!" /> 我们可以通过TextView所提供

文件重命名之动态修改ListView里指定Item中的组件属性

在Android实际开发过程中经常会遇到,修改ListView中某一项的值.如何达到这一目的呢? 方法主要有两种: 第一种方式:当ListView中某一项的值发生变化之后,重新加载数据已达到更新ListView的目的. 虽然第一种方式能够解决问题,但不值得推荐.因为这样会带来不必要的资源消耗.在移动终端这种硬件资源和计算能力都有限的情况下,显然有点得不偿失了,况且用户的体验也不好. 第二种方式:第二种方式可以说是第一种方式的改进.ListView中某一项的值发生改变,实际上是ListView的数

magento中根据用户的id获取用户的所有订单以及每个订单中的物品 以及物品的相关属性

本篇文章是对于已经有了magento基础的人而言,在某个模块的额controller中写任意一个函数. public function goodbyeAction() { for ($customer_id=1; $customer_id<10; $customer_id++) { // $customer_id=5;//用户的id $orders = Mage::getResourceModel('sales/order_collection') ->addFieldToSelect('*'