在Javascript中,对象根据其声明引用什么?

时间:2016-08-23 14:37:14

标签: javascript

我在学习Java脚本(OOP概念)时脑子里有一个理论问题,直到现在我已经学习了以下两种方法,我们可以在其中定义对象并初始化它的属性并设置其值例如:



// 1st method 
var obj1 = {
  name: "John",
  middleName: "XYZ",
  lastName: "David",
};
document.write(obj1.name + obj1.middleName + obj1.lastName);




在上述方法中,对象 obj1 是使用关键字( var )定义的声明变量但在这里我们用它来定义一个对象。现在我知道这个对象是全局的,我可以在函数内部或函数外部的任何地方访问它的属性,但我担心这个对象没有实例可以引用(即我们不能将 instanceof关键字用于此对象)因为我熟悉" Java" 语言,其中每个对象都是它的一个实例'但是在JavaScript中它有一个不同的概念,简而言之我的问题是:上面的对象究竟是指什么,或者这个对象是否自动初始化,即使没有为该对象声明的类?



//2nd method

var obj2 = new Person("David");
function Person(name)
{
  document.write(name + " " + "is a person");
  
}  
 document.write(" ");
 document.write(obj2 instanceof Person);




在第二种方法中,对象 obj2 函数Person()的对象,再次熟悉&#34 ; Java" 概念我认为obj2是 class Person 的对象,而 Person() 是其构造函数简而言之,我的问题是:一个对象如何成为 instanceof 一个没有首先声明类的函数?

2 个答案:

答案 0 :(得分:1)

JavaScript没有内置类的概念。这些对象之间没有类,只有对象和链接。使用“prototype”属性将对象相互链接。当您将new与函数名称一起使用时,如果您没有显式返回,则创建的对象可以是显式返回的对象,也可以是函数中的“this”。 您可以在 You-Dont-Know-JS/this & object prototypes找到详细信息。 如果未使用new关键字声明,则分配给它的对象将自动链接到Object.prototype。这包含几个可以通过新创建的对象委派调用的方法。您可以使用Object.create方法显式创建链接到另一个的对象,该方法将要链接的对象作为第一个参数传入。如果您不希望将新对象链接到任何其他对象,则可以将其创建为Object.create(null)。还有其他方法可以链接对象,但最近引入了Object.create来简化过程。

答案 1 :(得分:0)

我发现这对我的问题很有帮助,它解释了很多关于我问这个问题的内容,因为java脚本中的每个函数都被视为一个对象,因此使用 new 声明的对象将是该函数的一个实例

var obj2 = new Person("David"); // Instance of Person()
function Person(name) 
{
   //Constructor declared also its an object of prototype i.e. Person.prototype

}
document.write(obj2 instanceof Person);
// true, because: Object.getPrototypeOf(obj2) === Person.prototype

又是原型对象的对象,在上面的第一个方法中是

var obj1 = {
  //Rest codes go here
};

实例它的构造函数方法,默认为Object

 var obj1 = {
  name:David,
  middleName:XYZ,
  lastName:John
}; 
// Is same as
var obj1 = new Object();
  obj1.name=David;
  obj1.middleName=XYZ;
  obj1.lastName=John;
  document.write(obj1 instanceof Object);
  // true, because: Object.getPrototypeOf(obj1) === Object

因此在Javascript中,一个对象的实例基于其构造方法,如果显式定义那么它是该函数的实例,或者它是默认的Object方法实例

参考' S:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof

JavaScript: Class.method vs. Class.prototype.method

Every Object is a function and every function is Object - Which is Correct?

http://www.w3schools.com/js/js_object_definition.asp