今天刚好有时间,把创建多实例对象的方法写一下,也就是可以像new Date()一样。关于new操作符有一篇讲的很详细,大家可以先看下http://www.pushiming.com/blog/2009/10/the-new-operator/
了解new操作符后大家应该已经知道,必须有一个构造器才能执行new操作。所以比单实例要多了一个过程,就是要创建构造器,下面我把步骤给贴出来。
以MultiObject为例。
1.添加MultiObject.h文件
-
#ifndefMultiObject_h
-
#defineMultiObject_h
-
#include<wtf/PassRefPtr.h>
-
#include<wtf/RefCounted.h>
-
#include<wtf/RefPtr.h>
-
-
namespaceWebCore{
-
-
classFrame;
-
classString;
-
-
classMultiObject:publicRefCounted<MultiObject>{
-
-
public:
-
staticPassRefPtr<MultiObject>create(Frame*frame)
-
{
-
returnadoptRef(newMultiObject(frame));
-
}
-
-
~MultiObject();
-
-
voiddisconnectFrame();
-
Frame*frame()const{returnm_frame;}
-
-
Stringdescription()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"
-
-
namespaceWebCore{
-
-
MultiObject::MultiObject(Frame*frame)
-
:m_frame(frame)
-
{
-
}
-
-
MultiObject::~MultiObject()
-
{
-
disconnectFrame();
-
}
-
-
voidMultiObject::disconnectFrame()
-
{
-
m_frame=0;
-
}
-
-
StringMultiObject::description()const
-
{
-
return"HelloWorld!";
-
}
-
}
3.添加MultiObject.idl文件
-
modulewindow{
-
interface[
-
CustomConstructor
-
]MultiObject{
-
readonlyattributeDOMStringdescription;
-
};
-
}
4.修改DOMWindow.h文件
添加声明如下:
-
attribute[JSCCustomGetter]MultiObjectConstructorMultiObject;
WebCore/bindings/js
5.添加JSMultiObjectConstructor.h
-
#ifndef__JSMultiObjectConstructor_h__
-
#define__JSMultiObjectConstructor_h__
-
-
#include"JSDOMBinding.h"
-
-
namespaceWebCore{
-
-
classJSMultiObjectConstructor:publicDOMConstructorObject{
-
public:
-
JSMultiObjectConstructor(JSC::ExecState*,JSDOMGlobalObject*);
-
staticconstJSC::ClassInfos_info;
-
private:
-
virtualJSC::ConstructTypegetConstructData(JSC::ConstructData&);
-
virtualconstJSC::ClassInfo*classInfo()const{return&s_info;}
-
};
-
-
}
-
-
#endif//__JSMultiObjectConstructor_h__
6.添加JSMultiObjectConstructor.cpp
-
#include"config.h"
-
#include"JSMultiObjectConstructor.h"
-
#include"JSMultiObject.h"
-
#include"ScriptExecutionContext.h"
-
#include"MultiObject.h"
-
#include<runtime/Error.h>
-
#include"JSDOMWindowBase.h"
-
-
usingnamespaceJSC;
-
-
namespaceWebCore{
-
-
ASSERT_CLASS_FITS_IN_CELL(JSMultiObjectConstructor);
-
-
constClassInfoJSMultiObjectConstructor::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);
-
}
-
-
staticJSObject*constructMultiObject(ExecState*exec,JSObject*constructor,constArgList&)
-
{
-
JSMultiObjectConstructor*jsConstructor=static_cast<JSMultiObjectConstructor*>(constructor);
-
JSDOMWindowBase*window=static_cast<JSDOMWindowBase*>(jsConstructor->globalObject());
-
if(!window||!window->impl()||!window->impl()->frame())
-
returnError::create(exec,ReferenceError,"CannotcreateMultiObject...",-1,-1,UString());
-
RefPtr<MultiObject>MultiObject=MultiObject::create(window->impl()->frame());
-
if(!MultiObject.get())
-
returnError::create(exec,ReferenceError,"NotsupportMultiObject...",-1,-1,UString());
-
returnCREATE_DOM_OBJECT_WRAPPER(exec,jsConstructor->globalObject(),MultiObject,MultiObject.get());
-
}
-
-
ConstructTypeJSMultiObjectConstructor::getConstructData(ConstructData&constructData)
-
{
-
constructData.native.function=constructMultiObject;
-
returnConstructTypeHost;
-
}
-
-
}
7.修改JSDOMWindowCustom.cpp
-
#include"JSMultiObjectConstructor.h"
-
-
-
JSValueJSDOMWindow::multiObject(ExecState*exec)const
-
{
-
returngetDOMConstructor<JSMultiObjectConstructor>(exec,this);
-
}
OK,再修改相应的CMakeLists.txt就行了。
注意:头文件包含依据自己的项目。
分享到:
相关推荐
共同学习共同进步
win32-x64-67_binding.node
使用 Windows 窗体 BindingSource 自定义项添加,From MSDN
实例220 动态创建多个Button控件 295 11.2 TextBox控件应用 296 实例221 制作多行文本框 296 实例222 制作密码文本框 297 实例223 在TextBox控件中显示回车符 297 实例224 只允许输入数字的TextBox控件 298 实例225 ...
WPF的binding代码实例 总结的几个binding的基础运用
附件为个人编写的自定义android开发MVP+ViewBinding架构Demo,已经在多个项目中使用,相对比较成熟了。使用当前主流的MVP+Viewbing架构模式,喜欢的小伙伴请给个好评,谢谢!
Binding.js 绑定并观看javascript对象或DOM元素的更新属性或成员更改。请参阅以获取更改特征通过脏支票和Object.observe快速Object.observe 原子更新属性过滤器支持观看DOM属性和属性允许带有访问器的属性零延迟或...
附件为个人编写的自定义android开发MVP+ViewBinding架构Demo,已经在多个项目中使用,相对比较成熟了。使用当前主流的MVP+Viewbing架构模式,喜欢的小伙伴请给个好评,谢谢!(以此篇为准)
android 自定义View — 自定义组合控件
数据绑定流程: 1、框架把ServletRequest对象和请求参数传递给DataBinder ...BindingResult包含了已完成数据绑定的形参对象和校验错误信息对象。 最终SpringMVC框架会把BindingResult中的数据,分别赋给相应的处理方法。
c# 利用WCF实现https 安全通信
1.3对象创建过程与binding解析过程 同时由于本人能力有限,时间有限. 这些东西仅仅为抛砖引玉,我是转而已。可能会有一些不到位的地方。 如有不同意见可以在此大家一起批评与探讨.谢谢 由于javaeye上只允许...
1.3对象创建过程与binding解析过程 同时由于本人能力有限,时间有限. 这些东西仅仅为抛砖引玉,我是转而已。可能会有一些不到位的地方。 如有不同意见可以在此大家一起批评与探讨.谢谢 由于javaeye上只允许...
win32-ia-32-48_binding.node插件去掉node不报错win32-ia-32-48_binding.node插件去掉node不报错win32-ia-32-48_binding.node插件去掉node不报错win32-ia-32-48_binding.node插件去掉node不报错win32-ia-32-48_...
步骤二:根据自定义类创建一个.pkg文件,我们把自定义的MySprite类定义到.pkg文件中 注意:1>,只要根据自定类.h中的内容,至于.cpp的实现,binding后lua会自动调用类的函数 2>,书写.pkg文件时要注意几条...
KoBindings ...ko-multiple-select-binding.js < head > < link rel =" stylesheet " href =" libs/MultipleSelect/css/multiple-select.css " /> </ head > < body > <
本文以实例形式讲述了C#应用BindingSource实现数据同步的方法,对C#数据库程序开发来说具有一定的参考借鉴价值。具体实现方法如下: 下面的代码示例演示如何使用 BindingSource 组件,将三个控件(两个文本框控件和...