webkit的js对象扩展(二)——binding方式创建自定义对象(多实例)
来源:互联网 发布:python socket通信框架 编辑:程序博客网 时间:2024/06/01 11:14
今天刚好有时间,把创建多实例对象的方法写一下,也就是可以像new Date()一样。关于new操作符有一篇讲的很详细,大家可以先看下http://www.pushiming.com/blog/2009/10/the-new-operator/
了解new操作符后大家应该已经知道,必须有一个构造器才能执行new操作。所以比单实例要多了一个过程,就是要创建构造器,下面我把步骤给贴出来。
以MultiObject为例。
1.添加MultiObject.h文件
- #ifndef MultiObject_h
- #define MultiObject_h
- #include <wtf/PassRefPtr.h>
- #include <wtf/RefCounted.h>
- #include <wtf/RefPtr.h>
- namespace WebCore {
- class Frame;
- class String;
- class MultiObject : public RefCounted<MultiObject> {
- public:
- static PassRefPtr<MultiObject> create(Frame* frame)
- {
- return adoptRef(new MultiObject(frame));
- }
- ~MultiObject();
- void disconnectFrame();
- Frame* frame() const { return m_frame; }
- String description() const;
- private:
- MultiObject(Frame*);
- Frame* m_frame;
- };
- }
- #endif
2.添加MultiObject.cpp文件
- #include "MultiObject.h"
- #include "PlatformString.h"
- #include "Frame.h"
- #include "Page.h"
- #include "RangerIFrameWidget.h"
- #include "config.h"
- namespace WebCore {
- MultiObject::MultiObject(Frame* frame)
- : m_frame(frame)
- {
- }
- MultiObject::~MultiObject()
- {
- disconnectFrame();
- }
- void MultiObject::disconnectFrame()
- {
- m_frame = 0;
- }
- String MultiObject::description() const //对象的属性
- {
- return "Hello World!";
- }
- }
- module window {
- interface [
- CustomConstructor
- ] MultiObject{
- readonly attribute DOMString description;
- };
- }
4.修改DOMWindow.h文件
添加声明如下:
- attribute [JSCCustomGetter] MultiObjectConstructor MultiObject;
5.添加JSMultiObjectConstructor.h
- #ifndef __JSMultiObjectConstructor_h__
- #define __JSMultiObjectConstructor_h__
- #include "JSDOMBinding.h"
- namespace WebCore {
- class JSMultiObjectConstructor : public DOMConstructorObject {
- public:
- JSMultiObjectConstructor(JSC::ExecState*, JSDOMGlobalObject*);
- static const JSC::ClassInfo s_info;
- private:
- virtual JSC::ConstructType getConstructData(JSC::ConstructData&);
- virtual const JSC::ClassInfo* classInfo() const { return &s_info; }
- };
- } // namespace WebCore
- #endif//__JSMultiObjectConstructor_h__
- #include "config.h"
- #include "JSMultiObjectConstructor.h"
- #include "JSMultiObject.h"
- #include "ScriptExecutionContext.h"
- #include "MultiObject.h"
- #include <runtime/Error.h>
- #include "JSDOMWindowBase.h"
- using namespace JSC;
- namespace WebCore {
- ASSERT_CLASS_FITS_IN_CELL(JSMultiObjectConstructor);
- const ClassInfo JSMultiObjectConstructor::s_info = { "MultiObjectConstructor", 0, 0, 0 };
- JSMultiObjectConstructor::JSMultiObjectConstructor(ExecState* exec, JSDOMGlobalObject* globalObject)
- : DOMConstructorObject(JSMultiObjectConstructor::createStructure(globalObject->objectPrototype()), globalObject)
- {
- putDirect(exec->propertyNames().prototype, JSMultiObjectPrototype::self(exec, globalObject), None);
- }
- static JSObject* constructMultiObject(ExecState* exec, JSObject* constructor, const ArgList&)
- {
- JSMultiObjectConstructor* jsConstructor = static_cast<JSMultiObjectConstructor*>(constructor);
- JSDOMWindowBase* window = static_cast<JSDOMWindowBase*>(jsConstructor->globalObject());
- if (!window || !window->impl() || !window->impl()->frame())
- return Error::create(exec, ReferenceError, "Can not create MultiObject...", -1, -1, UString());
- RefPtr<MultiObject> MultiObject = MultiObject::create(window->impl()->frame());
- if (!MultiObject.get())
- return Error::create(exec, ReferenceError, "Not support MultiObject...", -1, -1, UString());
- return CREATE_DOM_OBJECT_WRAPPER(exec, jsConstructor->globalObject(), MultiObject, MultiObject.get());
- }
- ConstructType JSMultiObjectConstructor::getConstructData(ConstructData& constructData)
- {
- constructData.native.function = constructMultiObject;
- return ConstructTypeHost;
- }
- } // namespace WebCore
- #include "JSMultiObjectConstructor.h"
- JSValue JSDOMWindow::multiObject(ExecState* exec) const
- {
- return getDOMConstructor<JSMultiObjectConstructor>(exec, this);
- }
OK,再修改相应的CMakeLists.txt就行了。
注意:头文件包含依据自己的项目。
- webkit的js对象扩展(二)——binding方式创建自定义对象(多实例)
- webkit的js对象扩展(二)——binding方式创建自定义对象(多实例)
- webkit的js对象扩展(二)——binding方式创建自定义对象(多实例)
- webkit的js对象扩展(一)——binding方式创建自定义对象(单实例)
- webkit的js对象扩展(一)——binding方式创建自定义对象(单实例)
- webkit的js对象扩展(一)——binding方式创建自定义对象(单实例)
- webkit js扩展方式之Binding添加新DOM对象
- Webkit JS扩展对象 多实例实现
- WebKit中为JS binding扩展DOM对象
- js对象的创建方式(小记)
- Android深入浅出系列之实例应用—弹出消息Toast对象的使用自定义方式(二)
- js自定义对象(二)
- JS面向对象(二)------------创建对象
- WPF中的binding(二)- 使用CLR对象或者对象名称作为Binding的数据源
- JS中定义对象方式二: 使用工厂方式创建对象(无参数传递)
- WebKit的JavaScript对象扩展
- [js]总结js创建object的方式(对象)
- WPF自定义对象的Binding
- GEF实战:图形之基本图形
- 《STL源码剖析》-- stl_vector.h
- Android中 Js 扩展及交互
- ThinkPHP 自动验证与自动填充无效可能的原因
- c++构造函数
- webkit的js对象扩展(二)——binding方式创建自定义对象(多实例)
- C语言编译流程
- 基于WebKit浏览器的本地扩展方法
- JDBC 连接字符串大全
- three.js 绕其边缘旋转
- 数据库和代码程序间的数据类型选择
- PyMongo小总结
- webkit idl 资料
- 标准输出流函数