小编Tom*_*rdt的帖子

在JavaScript中访问__defineGetter __/__ defineSetter__隐藏的属性

我正在尝试为该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但看起来对构造函数的支持并不常见,所以我想知道是否有任何替代方法.

javascript dom innerhtml prototypejs getter-setter

5
推荐指数
1
解决办法
1015
查看次数

Javascript:哪些浏览器支持原型继承?

目前我没有使用原型,因为我记得有一天我读过一篇文章,其中声称在IE 7及以下版本中不支持Prototype,但我再也找不到那篇文章了很高兴知道它是如何得到整体支持的.

javascript prototype-programming

5
推荐指数
1
解决办法
3817
查看次数

使用'invert'函数在Javascript中扩展Boolean对象

我想用一个原型函数扩展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 boolean prototype-programming

5
推荐指数
1
解决办法
807
查看次数

Javascript原型和__proto__以及getPrototypeOf问题

我在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部分 …

javascript prototype-programming

4
推荐指数
2
解决办法
3318
查看次数

Object.preventExtensions实际上允许__proto__的变异?

我正在浏览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 object ecmascript-5 prototype-programming

4
推荐指数
1
解决办法
1826
查看次数

javascript inherit来自Vs Prototype

我想知道在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)

javascript inheritance prototype-programming

4
推荐指数
1
解决办法
1372
查看次数

将应用程序从原型1.5迁移到1.7

我正在将应用程序从原型1.5迁移到原型1.7.
有没有人有过这次迁移的经历?
请分享我在进行此迁移时可能遇到的痛点.

谢谢,

javascript prototypejs

4
推荐指数
1
解决办法
646
查看次数

推土机文件未找到异常

我正在尝试执行下面的推土机示例.我的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)

源代码 …

dozer

4
推荐指数
1
解决办法
9372
查看次数

iOS不会调用Facebook身份验证回调

我正在使用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)

请让我知道发生了什么.

提前致谢.

facebook ios

4
推荐指数
1
解决办法
3102
查看次数

Objective-C构建系统,可以做模块

我正在研究我的一个小型业余爱好项目,我有一个大型结构,负责所有核心任务.这个核心本身不会做太多,它需要十几个子系统才能真正做到这一点.我目前只编写了一个子系统,所以它仍然很容易改变.

我有很多代码位置,核心与子系统接口,我不想每次添加新子系统时都要更改核心.我的想法是让它模块化.

很长一段时间我在游戏引擎中看到类似的东西,其中可以通过使用一些预处理器宏来定义新的控制台命令.这就是你所要做的一切 - 在编译后它立即在游戏中工作.

让我们以游戏引擎为例来说明我的情况.我在下面的代码中添加了评论,这些评论应该让我的问题更加明显.

我的问题:如何在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)

c c++ modularity objective-c

4
推荐指数
1
解决办法
1078
查看次数