Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
识别Javascript对象_Javascript - Fatal编程技术网

识别Javascript对象

识别Javascript对象,javascript,Javascript,我在识别javascript对象时遇到问题 function A(x, y){ this.boo = function(){ } } var aa = new A("1", "2"); aa.boo(); 在代码中,“aa”是javascript对象吗?它是否也从object.prototype继承属性?如果是,我如何从新手那里确定。您可以检查其类型: if (typeof(aa) == "object") { alert("It's an object!"); }

我在识别javascript对象时遇到问题

function A(x, y){

    this.boo = function(){
    }
}
var aa = new A("1", "2");
aa.boo();

在代码中,“aa”是javascript对象吗?它是否也从object.prototype继承属性?如果是,我如何从新手那里确定。

您可以检查其类型:

if (typeof(aa) == "object") {
    alert("It's an object!");
}

这将导致一个警报,意味着它是一个对象,并且还具有通过对象扩展的任何方法。prototype

您可以检查其类型:

if (typeof(aa) == "object") {
    alert("It's an object!");
}
这将导致一个警报,表示它是一个对象,并且还具有通过object.prototype扩展的任何方法。可以确定,因为每个本机对象都继承自object.prototype,但全局对象除外,其[[Prototpye]]依赖于实现,但在大多数浏览器中它是object的实例

编辑 一些澄清

本机对象是使用ECMAScript构建的对象,例如

function foo() {}
var obj = {};
var arr = [];
Global   instanceof Object; // might be true
Array    instanceof Object; // true
Math     instanceof Object; // true
Object   instanceof Object; // true - Object is an Object :-)
Date     instanceof Object; // true
Function instanceof Object; // true
等等。它们的[[prototype]]链上都有Object.prototype,这使它们成为Object的实例以及链上任何其他构造函数的原型。ECMAScript对象可以从多个原型继承,因此可以是多个对象的实例:

function Foo(){}
Foo instanceof Function; // true
Foo instanceof Object;   // true

var foo = new Foo();
foo instanceof Foo;     //true
foo instanceof Object;  //true
内置对象是由ECMAScript提供的对象,例如

function foo() {}
var obj = {};
var arr = [];
Global   instanceof Object; // might be true
Array    instanceof Object; // true
Math     instanceof Object; // true
Object   instanceof Object; // true - Object is an Object :-)
Date     instanceof Object; // true
Function instanceof Object; // true
等等。以上大部分也是函数的实例,包括函数

主机对象是由主机环境提供的对象,例如DOM中的所有对象,例如

document
document.createElement
window
var element = document.createElement('img');
var nodeList = element.getElementsByTagName();
等等。这些对象只需遵循ECMAScript的最基本规则,它们不需要任何继承模型,甚至在使用instanceof或typeof运算符进行简单测试时可能会抛出错误,这是一种令人讨厌的行为,但某些浏览器的某些版本确实如此-许多IE主机对象实现为ActiveX控件,因此,它们在try..catch块中创建

阅读规范ECMA–262中关于本机ECMAScript对象ES 3和标准内置ECMAScript对象ES 5对象的部分,就在这里。

您可以确定,因为每个本机对象都继承自object.prototype,但全局对象除外,其[[Prototpye]]依赖于实现,但在大多数浏览器中,它是对象的一个实例

编辑 一些澄清

本机对象是使用ECMAScript构建的对象,例如

function foo() {}
var obj = {};
var arr = [];
Global   instanceof Object; // might be true
Array    instanceof Object; // true
Math     instanceof Object; // true
Object   instanceof Object; // true - Object is an Object :-)
Date     instanceof Object; // true
Function instanceof Object; // true
等等。它们的[[prototype]]链上都有Object.prototype,这使它们成为Object的实例以及链上任何其他构造函数的原型。ECMAScript对象可以从多个原型继承,因此可以是多个对象的实例:

function Foo(){}
Foo instanceof Function; // true
Foo instanceof Object;   // true

var foo = new Foo();
foo instanceof Foo;     //true
foo instanceof Object;  //true
内置对象是由ECMAScript提供的对象,例如

function foo() {}
var obj = {};
var arr = [];
Global   instanceof Object; // might be true
Array    instanceof Object; // true
Math     instanceof Object; // true
Object   instanceof Object; // true - Object is an Object :-)
Date     instanceof Object; // true
Function instanceof Object; // true
等等。以上大部分也是函数的实例,包括函数

主机对象是由主机环境提供的对象,例如DOM中的所有对象,例如

document
document.createElement
window
var element = document.createElement('img');
var nodeList = element.getElementsByTagName();
等等。这些对象只需遵循ECMAScript的最基本规则,它们不需要任何继承模型,甚至在使用instanceof或typeof运算符进行简单测试时可能会抛出错误,这是一种令人讨厌的行为,但某些浏览器的某些版本确实如此-许多IE主机对象实现为ActiveX控件,因此,它们在try..catch块中创建


阅读规范ECMA–262中有关本机ECMAScript对象ES 3和标准内置ECMAScript对象ES 5对象的部分,就在这里。

结合前面两条注释:


结合前两条评论:

这就是我用的

if( Object.prototype.toString.call( aa ) === '[object Object]' )
{
    doSomething();
}
这就是我用的

if( Object.prototype.toString.call( aa ) === '[object Object]' )
{
    doSomething();
}
在代码中,“aa”是javascript对象吗

对。或者更准确地说,aa是一个引用JavaScript对象的变量

它是否也从object.prototype继承属性

来自Object.prototype,是的。大写在JavaScript中很重要,因为它区分大小写

如果是,我如何从新手那里确定

我不太清楚你在这里是什么意思。在JavaScript环境中,有第4.3.8节的主机对象和第4.3.6节的本机对象。本机对象都继承自Object.prototype。宿主对象可以是也可以不是

有很多方法可以查询对象以找出它是什么。我在中概述了其中几个,但要总结一下:

有typeof,但是关于对象,它说的都是对象宿主或本机,所以如果您想了解更多关于它是什么类型的对象,这并不是非常有用。 还有instanceof,它可以用来检查对象是否是通过特定的构造函数创建的,例如,if obj instanceof Date。 使用Object.prototype.toString有一个技巧,它有时可以为您提供有关您正在处理的本机对象类型的更具体信息,如果它是内置对象,请参见第4.3.7节。 或者你可以停止担心,学会爱鸭子。例如,不要担心对象是什么,只要看看它看起来是否像你想要的那样。 在代码中,“aa”是javascript对象吗

对。或者更准确地说,aa是一个引用JavaScript对象的变量

它在他体内吗 还需要object.prototype的rit属性吗

来自Object.prototype,是的。大写在JavaScript中很重要,因为它区分大小写

如果是,我如何从新手那里确定

我不太清楚你在这里是什么意思。在JavaScript环境中,有第4.3.8节的主机对象和第4.3.6节的本机对象。本机对象都继承自Object.prototype。宿主对象可以是也可以不是

有很多方法可以查询对象以找出它是什么。我在中概述了其中几个,但要总结一下:

有typeof,但是关于对象,它说的都是对象宿主或本机,所以如果您想了解更多关于它是什么类型的对象,这并不是非常有用。 还有instanceof,它可以用来检查对象是否是通过特定的构造函数创建的,例如,if obj instanceof Date。 使用Object.prototype.toString有一个技巧,它有时可以为您提供有关您正在处理的本机对象类型的更具体信息,如果它是内置对象,请参见第4.3.7节。 或者你可以停止担心,学会爱鸭子。例如,不要担心对象是什么,只要看看它看起来是否像你想要的那样。
@杰里米·班克斯:完全正确,但我不认为细节是必要的,因为他在问创建的对象是否会从对象继承。prototype@Jeremy-我认为您的术语有误-ECMAScript将内置对象定义为本机对象,如数组、数学、全局等ECMA-262§4.2第4段。宿主对象不是内置对象,它们是宿主对象。@Jeremy Banks:完全正确,但我认为细节是不必要的,因为他在问创建的对象是否会从对象继承。prototype@Jeremy-我认为您的术语有误-ECMAScript将内置对象定义为本机对象,如数组、数学、,全球等等,ECMA-262§4.2第4段。宿主对象不是内置对象,它们是宿主对象。宿主对象不是本机对象,并且不在ECMAScript规范的范围内,因此它们可以执行自己喜欢的操作。他们根本不需要实现任何类型的继承。你能澄清一下你在文章中所说的原生对象是什么意思吗?为什么这个答案会被否决@Jeremy:到规范中的本机对象。编辑:支持全局对象原型的实现依赖性。内置对象是ECMA-262中定义的对象。本机对象是所有内置对象加上任何使用ECMAScript构建的对象,如OP中的对象。由环境提供的对象(如浏览器中的DOM)是主机对象,您不应该假设任何类型的继承,除非您正在处理您知道实现某种继承的特定浏览器。主机对象不是本机对象,并且不在ECMAScript规范范围内,因此它们可以随心所欲。他们根本不需要实现任何类型的继承。你能澄清一下你在文章中所说的原生对象是什么意思吗?为什么这个答案会被否决@Jeremy:到规范中的本机对象。编辑:支持全局对象原型的实现依赖性。内置对象是ECMA-262中定义的对象。本机对象是所有内置对象加上任何使用ECMAScript构建的对象,如OP中的对象。由环境提供的对象(如浏览器中的DOM)是主机对象,你不应该假设任何类型的继承,除非你正在处理你知道实现某种继承的特定浏览器。+1表示学会爱鸭子,不意味着你的答案的其余部分没有帮助。+1表示学会爱鸭子,不意味着你的答案的其余部分没有帮助。