小编dku*_*ppi的帖子

是否可以获取对象的不可枚举的继承属性名称?

在JavaScript中,我们有几种获取对象属性的方法,具体取决于我们想要获得的内容.

1)Object.keys(),它返回一个对象的所有自己的可枚举属性,一个ECMA5方法.

2)一个for...in循环,它返回一个对象的所有可枚举属性,无论它们是自己的属性,还是从原型链继承.

3)Object.getOwnPropertyNames(obj)返回对象的所有属性,可枚举与否.

我们也有这样的方法hasOwnProperty(prop)让我们检查属性是继承还是实际属于该对象,propertyIsEnumerable(prop)顾名思义,它让我们检查属性是否可枚举.

有了所有这些选项,就无法获得对象的不可枚举的非自有属性,这就是我想要做的.有没有办法做到这一点?换句话说,我可以以某种方式获取继承的非可枚举属性的列表吗?

谢谢.

javascript oop properties object

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

使用JavaScript中的参数调用apply方法

我想使用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()方法调用带参数的函数.

javascript arguments apply

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

Javascript中的新对象是否具有原型属性?

对于学术价值来说,这是一个纯粹微不足道的问题:

如果我创建一个新对象,可以通过执行以下操作:

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

javascript prototype-programming

16
推荐指数
3
解决办法
3436
查看次数

Javascript:setAttribute()vs element.attribute = value来设置"name"属性

所以我正在学习操纵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)

不确定为什么点符号方法在第一种情况下不起作用.

为什么会这样?

javascript setattribute getelementsbyname

14
推荐指数
2
解决办法
7万
查看次数

Object.getPrototypeOf()与Javascript中的Object.constructor.prototype相同吗?

有没有之间的差异Object.getPrototypeOf(obj)obj.constructor.prototype?或者这两个引用相同的东西?

javascript inheritance constructor prototype-programming

9
推荐指数
1
解决办法
1377
查看次数

HTML5编码和西里尔文

让我好奇的东西 - 据说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文件,这不是问题.

html5 character-encoding cyrillic

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

JavaScript词汇范围与变量生命

我很好奇为什么会这样:

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 closures scope function

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