在JavaScript中,我们有几种获取对象属性的方法,具体取决于我们想要获得的内容.
1)Object.keys(),它返回一个对象的所有自己的可枚举属性,一个ECMA5方法.
2)一个for...in循环,它返回一个对象的所有可枚举属性,无论它们是自己的属性,还是从原型链继承.
3)Object.getOwnPropertyNames(obj)返回对象的所有属性,可枚举与否.
我们也有这样的方法hasOwnProperty(prop)让我们检查属性是继承还是实际属于该对象,propertyIsEnumerable(prop)顾名思义,它让我们检查属性是否可枚举.
有了所有这些选项,就无法获得对象的不可枚举的非自有属性,这就是我想要做的.有没有办法做到这一点?换句话说,我可以以某种方式获取继承的非可枚举属性的列表吗?
谢谢.
我想使用javascript apply()方法调用一个函数.如果函数没有参数,这可以正常工作.即
function test()
{
console.log(this);
}
body = document.getElementsByTagName("body")[0]; // shortcut to body element
test.apply(body); // returns [object HTMLBodyElement]
Run Code Online (Sandbox Code Playgroud)
但我似乎无法做同样的事情来调用具有参数的函数:
function test(msg)
{
console.log(msg);
}
body = document.getElementsByTagName("body")[0]; // shortcut to body element
test(this).apply(body); // mysteriously returns the correct result, then
// typeError: 'undefined' is not an object (evaluating "test(this).apply".
Run Code Online (Sandbox Code Playgroud)
上面的例子完全是微不足道的,但我的问题是:如何使用apply()方法调用带参数的函数.
对于学术价值来说,这是一个纯粹微不足道的问题:
如果我创建一个新对象,可以通过执行以下操作:
var o = { x:5, y:6 };
Run Code Online (Sandbox Code Playgroud)
要么
var o = Object.create({ x:5, y:6 });
Run Code Online (Sandbox Code Playgroud)
当我查询o.prototype属性时,我明白了undefined.我认为任何新创建的对象都会自动继承Object.prototype原型.
此外,对此对象的调用toString()(一种方法Object.prototype)工作正常,暗示o它继承自Object.prototype.那我为什么要这样undefined?
所以我正在学习操纵DOM,我注意到一件有趣的事情:
假设我想name使用"." 设置元素的属性.点符号:
element.name = "someName";
console.log(document.getElementsByName("someName")[0]); // returns "undefined"??
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用该document.setAttribute()方法,它可以正常工作:
element.setAttribute("name", "someName");
console.log(document.getElementsByName("someName")[0]); // returns the element like it should.
Run Code Online (Sandbox Code Playgroud)
不确定为什么点符号方法在第一种情况下不起作用.
为什么会这样?
有没有之间的差异Object.getPrototypeOf(obj)和obj.constructor.prototype?或者这两个引用相同的东西?
让我好奇的东西 - 据说HTML5中的默认字符编码是UTF-8.但是,如果我有一个简单的HTML文件与HTML5文档类型,如下面的代码,我得到:
俄语中的"你好":"Ð-Ð'раÑÑ,вуйÑ,Ðμ"
在Chrome 33 +,Safari 6,IE11等中
<!DOCTYPE html>
<html>
<head></head>
<body>
<p>"hello" in Russian is "???????????"</p>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
是什么赋予了?浏览器不应该使用UTF-8 unicode标准并正确显示文本吗?我正在使用Coda,默认设置为使用UTF-8编码保存html文件,这不是问题.
我很好奇为什么会这样:
function doThis(){
counter = 0;
return counter;
};
console.log(counter); // returns "reference error: can't find variable"
Run Code Online (Sandbox Code Playgroud)
这是有道理的,因为变量不存在于函数之外.但是如果我创建一个自我执行的函数:
(function doThis(){
counter = 0;
return counter;
})();
console.log(counter); // returns 0
Run Code Online (Sandbox Code Playgroud)
为什么变量counter仍然存在?它不是一个闭包,似乎没有任何东西似乎从外部引用这个变量,所以它不应该被垃圾收集破坏吗?
javascript ×6
apply ×1
arguments ×1
closures ×1
constructor ×1
cyrillic ×1
function ×1
html5 ×1
inheritance ×1
object ×1
oop ×1
properties ×1
scope ×1
setattribute ×1