我正在尝试为该innerHTML属性定义自定义setter .不幸的是,我在定义setter函数后无法访问底层属性:
$('body')[0].__defineSetter__("innerHTML",
function (val) {
alert("Setting to: " + val);
this.innerHTML = val;
});
Run Code Online (Sandbox Code Playgroud)
此片段填充调用堆栈,因为赋值以递归方式调用setter.Apparenly innerHTML已经是IE8中的重载属性,你可以简单地保存旧的get/set对并在新的属性描述符中使用它.摘自MSDN:
var innerHTMLdescriptor = Object.getOwnPropertyDescriptor(Element.prototype, 'innerHTML');
Object.defineProperty(Element.prototype, 'innerHTML',
{ set: function(htmlVal) {
var safeHTML = toStaticHTML(htmlVal);
innerHTMLdescriptor.set.call(this, safeHTML);
}
});
Run Code Online (Sandbox Code Playgroud)
但是,Chrome的情况似乎并非如此,其中getOwnPropertyDescriptor返回未定义innerHTML.在这种情况下,我如何访问底层属性?
奖金问题:我如何确保将来创建的所有对象都有这种特殊innerHTML行为?是否可以使用DOM原型?似乎重载函数不是我需要的.也许有可能重载DOM构造函数并添加一个调用,__defineGetter__/defineProperty但看起来对构造函数的支持并不常见,所以我想知道是否有任何替代方法.
目前我没有使用原型,因为我记得有一天我读过一篇文章,其中声称在IE 7及以下版本中不支持Prototype,但我再也找不到那篇文章了很高兴知道它是如何得到整体支持的.
我想用一个原型函数扩展Boolean对象,该函数反转它的当前值.到现在为止,我一直在做这样的事情:
var bool = true;
bool = !bool;
console.log(bool); // false
Run Code Online (Sandbox Code Playgroud)
我尝试扩展布尔对象的尝试并不富有成效.那是我得到了多远:
Boolean.prototype.invert = function() {
return !this.valueOf();
}
var bool = true;
bool = bool.invert();
console.log(bool); // false
Run Code Online (Sandbox Code Playgroud)
关闭,但不够近.我正在寻找这些方面的解决方案:
var bool = true;
bool.invert();
console.log(bool); // false
Run Code Online (Sandbox Code Playgroud)
是的,我知道,扩展内置对象通常被认为是一个坏主意.请让我们将讨论保存一天.
我在javascript中有一个简单的类:
function foo() {
this.bar = "bar";
}
var test = new foo;
console.log(foo.prototype,foo.__proto__)
/*output: foo {
constructor: function foo() {
__proto__: Object
}
,
function Empty() {}
*/
console.log(test,test.prototype,test.__proto__,test.__proto__.__proto__)
/*output: foo {
bar: "bar"
__proto__: foo
}
,
undefined
,
foo {
constructor: function foo() {
__proto__: Object
}
,
Object {
...
}
*/
Run Code Online (Sandbox Code Playgroud)
我不明白的是:
在第一个日志中foo.prototype有一个__proto__属性是一个Object
在第二个日志中test.__proto__有一个__proto__属性是一个Object
何时使用__proto__和prototype什么时候有什么区别?
更新:
在John Resig的 instanceOf部分 …
我正在浏览MDC关于添加到Object的新功能.其中之一,Object.preventExtensions据说可以防止对象原型的突变,这可以通过使用Object.getPrototypeOf或获得__proto__.
然而,在Chrome上,它似乎只是允许突变到对象的原型.只需执行相关页面上的代码即可确认:
// EXTENSION (only works in engines supporting __proto__
// (which is deprecated. Use Object.getPrototypeOf instead)):
// A non-extensible object's prototype is immutable.
var fixed = Object.preventExtensions({});
fixed.__proto__ = { oh: "hai" }; // throws a TypeError
Run Code Online (Sandbox Code Playgroud)
我没有得到这个TypeError,fixed.__proto__.oh === 'hai'所以它已被设置,即使它应该被禁止.我也可以在编码时添加它Object.getPrototypeOf(fixed).oh = 'hai'.
这是否意味着Chrome对此功能有不同的解释?如何防止扩展对象的原型(在Chrome中)?
我想知道在Javascript中定义继承时inheritFrom和原型之间的区别.
function classA{}
classA.name="abc";
classA.functionName=function(){
alert("Function Name Alert");
}
function classB{ }
Run Code Online (Sandbox Code Playgroud)
以下代码的区别是什么?
classB.prototype=classA();
Run Code Online (Sandbox Code Playgroud)
和
classB.prototype.inheritFrom(classA);
Run Code Online (Sandbox Code Playgroud) 我正在将应用程序从原型1.5迁移到原型1.7.
有没有人有过这次迁移的经历?
请分享我在进行此迁移时可能遇到的痛点.
谢谢,
我正在尝试执行下面的推土机示例.我的xml文件位于与我的java文件相同的位置,但我收到的文件未找到异常
Exception in thread "main" org.dozer.MappingException: Unable to locate dozer mapping file [dozerMapping.xml] in the classpath!
at org.dozer.util.MappingUtils.throwMappingException(MappingUtils.java:87)
at org.dozer.util.MappingValidator.validateURL(MappingValidator.java:63)
at org.dozer.loader.CustomMappingsLoader.loadFromFiles(CustomMappingsLoader.java:101)
at org.dozer.loader.CustomMappingsLoader.load(CustomMappingsLoader.java:56)
at org.dozer.DozerBeanMapper.loadCustomMappings(DozerBeanMapper.java:213)
at org.dozer.DozerBeanMapper.getMappingProcessor(DozerBeanMapper.java:186)
at org.dozer.DozerBeanMapper.map(DozerBeanMapper.java:111)
at com.mapping.CopyAttributes.main(CopyAttributes.java:28)
Run Code Online (Sandbox Code Playgroud)
如果我给完整文件路径它正在工作,但我得到以下异常
Exception in thread "main" org.dozer.MappingException: java.net.MalformedURLException: unknown protocol: c
at org.dozer.util.MappingUtils.throwMappingException(MappingUtils.java:82)
at org.dozer.util.ResourceLoader.getResource(ResourceLoader.java:57)
at org.dozer.util.DefaultClassLoader.loadResource(DefaultClassLoader.java:44)
at org.dozer.util.MappingValidator.validateURL(MappingValidator.java:61)
at org.dozer.loader.CustomMappingsLoader.loadFromFiles(CustomMappingsLoader.java:101)
at org.dozer.loader.CustomMappingsLoader.load(CustomMappingsLoader.java:56)
at org.dozer.DozerBeanMapper.loadCustomMappings(DozerBeanMapper.java:213)
at org.dozer.DozerBeanMapper.getMappingProcessor(DozerBeanMapper.java:186)
at org.dozer.DozerBeanMapper.map(DozerBeanMapper.java:111)
at com.mapping.CopyAttributes.main(CopyAttributes.java:28)
Caused by: java.net.MalformedURLException: unknown protocol: c
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at java.net.URL.<init>(Unknown Source)
at org.dozer.util.ResourceLoader.getResource(ResourceLoader.java:55)
Run Code Online (Sandbox Code Playgroud)
源代码 …
我正在使用Xcode4.2和Facebook SDK最新版本制作Facebook应用程序.我将Hackbook复制到我的应用程序并替换了一些方法名称.然后它工作了![在此输入图像描述] [1]
但是当我点击"确定"按钮时,没有响应.我检查了细节.不知何故iOS没有在appdelegate.m中调用OpenURL.
为什么iOS不调用该方法?这是代码.
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [self.facebook handleOpenURL:url];
}
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
return [self.facebook handleOpenURL:url];
}
Run Code Online (Sandbox Code Playgroud)
请让我知道发生了什么.
提前致谢.
我正在研究我的一个小型业余爱好项目,我有一个大型结构,负责所有核心任务.这个核心本身不会做太多,它需要十几个子系统才能真正做到这一点.我目前只编写了一个子系统,所以它仍然很容易改变.
我有很多代码位置,核心与子系统接口,我不想每次添加新子系统时都要更改核心.我的想法是让它模块化.
很长一段时间我在游戏引擎中看到类似的东西,其中可以通过使用一些预处理器宏来定义新的控制台命令.这就是你所要做的一切 - 在编译后它立即在游戏中工作.
让我们以游戏引擎为例来说明我的情况.我在下面的代码中添加了评论,这些评论应该让我的问题更加明显.
我的问题:如何在Objective-C中实现一个模块化系统,它是在编译时构建的,并不涉及更改模块本身以外的任何内容?
-(void)interpretCommand:(NSString*)command {
// Find the space in the command
NSRange pos = [command rangeOfString:@" "];
if (pos.length == 0) return; // No space found
NSString *theCommand = [command substringToIndex:pos.location];
// !!! Here comes the important code !!!
// Get all the available commands - this is what my question is about!
NSDictionary *allCommands = nil;
// Find the command in the dictionary
NSString *foundCommand …Run Code Online (Sandbox Code Playgroud) javascript ×7
prototypejs ×2
boolean ×1
c ×1
c++ ×1
dom ×1
dozer ×1
ecmascript-5 ×1
facebook ×1
inheritance ×1
innerhtml ×1
ios ×1
modularity ×1
object ×1
objective-c ×1