相关疑难解决方法(0)

为什么使用Object.prototype.hasOwnProperty.call(myObj,prop)而不是myObj.hasOwnProperty(prop)?

如果我理解正确,Javascript中的每个对象都继承自Object原型,这意味着Javascript中的每个对象都可以通过其原型链访问hasOwnProperty函数.

在阅读require.js的源代码时,我偶然发现了这个函数:

function hasProp(obj, prop) {
    return hasOwn.call(obj, prop);
}
Run Code Online (Sandbox Code Playgroud)

hasOwn是一个参考Object.prototype.hasOwnProperty.写这个函数是否有任何实际的区别

function hasProp(obj, prop) {
    return obj.hasOwnProperty(prop);
}
Run Code Online (Sandbox Code Playgroud)

既然我们在这,我们为什么要定义这个功能呢?这只是一个快捷方式和本地缓存属性访问(轻微)性能提升的问题,还是我错过了任何可能在没有此方法的对象上使用hasOwnProperty的情况?

javascript prototypal-inheritance hasownproperty requirejs

85
推荐指数
3
解决办法
3万
查看次数

为什么是Object.defineProperty()而不是this.defineProperty()(对象)?

我正在研究一个JavaScript项目,只是想知道为什么对象实例不继承defineProperty()和其他方法,而不是必须调用超类(superobject?)Object方法.

我查看了MDN文档,实际上有"非标准"属性方法.

但那些被弃用了.为什么要采取这些Object方法呢?

在我看来,像是instance.defineProperty(...)更好的东西Object.defineProperty(instance, ...).我也会对其他一些Object方法说同样的话.

javascript ecmascript-5

8
推荐指数
2
解决办法
2683
查看次数

为什么没有将ES5 Object方法添加到Object.prototype?

ES5添加数量方法Object,这似乎打破的JavaScript的语义的一致性.

举例来说,在此之前的扩展,JavaScript API的身边总是围绕operarting 对象本身;

var arrayLength = [].length;
var firstPosInString = "foo".indexOf("o");
Run Code Online (Sandbox Code Playgroud)

...新的Object方法就像;

var obj = { };
Object.defineProperty(obj, {
    value: 'a',
    writable: false
});
Run Code Online (Sandbox Code Playgroud)

......当以下内容更加符合时:

var obj = { };
obj.defineProperty({
    value: 'a',
    writable: false
});
Run Code Online (Sandbox Code Playgroud)

任何人都可以冷静我的好奇心,为什么会这样?是否有任何代码片段会破坏?标准委员会是否就他们选择这种方法的原因进行了公开讨论?

javascript consistency ecmascript-5

6
推荐指数
1
解决办法
582
查看次数