javascript 为什么在对象名前要有“函数”关键字?所有的对象真实的上都是函数?

1tuwyuhd  于 2023-01-08  发布在  Java
关注(0)|答案(8)|浏览(115)

当我们制造出这样一个物体时

function myObject(){  
Properties and methods here----
};

我们在对象名前写“函数”关键字有必要吗?所有的对象真实的上都是函数?我们能不能不这样写直接的对象名?

myObject(){  
Properties and methods here----
};
ssm49v7z

ssm49v7z1#

不,不是所有的对象都是函数(尽管所有的函数都是对象)。
这里,obj不是一个函数:

var obj = {
    foo: "bar"
};

也不要在这里使用dt

var dt = new Date();

为了表示“后面是函数声明或函数表达式”,function关键字是必需的,它只是JavaScript基本语法的一部分。

thigvfpy

thigvfpy2#

在第一种情况下,函数可以用作对象的构造函数。2所以你可以有:

function Person(name) {
    this.name = name
}

Person.prototype = {
    // methods can go in here
}

person1 = new Person("bob");
alert(person1.name) // alerts "bob"

你也可以把函数当作对象来使用,例如:

function myObject() {
    return myObject.test;
}

myObject.test = "bob";
alert(myObject()) // would alert "bob"

但并非所有对象都是函数。

var someObject = {
     name: "bob",
     moody: "sad"
}

alert(someObject.name); // alerts "bob"
try {
    someObject();
} catch (er) {
    alert(er);  // alerts "TypeError: object is not a function"
}

我建议您看一看https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function

gg58donl

gg58donl3#

一个原因显然是明确性;

function foo() 
{
    alert("cake") 
}

foo()
{
    alert("burb");
}

foo();

警报cakeburbcake,因为第二个foo() {...}只是一个常规函数调用,后跟一个用{}括起来的常规复合语句。

a9wyjsp7

a9wyjsp74#

function声明了一个函数。由于JavaScript的工作方式,函数可以用作 class,以生成对象。
但是如果你真的只需要一个对象,就用花括号,就像这样:

var myObject = {
  x : 30, // a property
  getX : function() { // a method
     return this.x;
  }
}

但是您对JavaScript的理解还需要做大量的工作:我读过几本关于它的书。

o7jaxewo

o7jaxewo5#

在Javascript中,我们可以通过各种方式创建对象:
1)文字

let employee = {"name": "tyrion","age":34}

2)构造函数(具有此构造函数的函数)

function employee(name, age) {
     this.name = name;
     this.age = age;
   }

让specificEmployee =新雇员(“tyrion”,34);

构造函数始终需要一个new运算符来创建对象

3)使用Object构造函数

let employee = Object.create(null);
   employee.name = "tyrion";
   employee.age = 34

在javascript中,除了原语类型之外的所有东西都是从Object构造函数继承的示例。

gpnt7bae

gpnt7bae6#

不,这不是必需的。您还可以:

var myObject = {  
   Prop1: "Value1", 
   Prop2: "Value2", 
   Method1: function() {
      alert("hello");
   }
};

实时测试用例:http://jsfiddle.net/rKunx/

aemubtdh

aemubtdh7#

你可以写:

myObject = {
Properties and methods here----
}
dffbzjpn

dffbzjpn8#

如果你想在Java中尽可能地避免使用function关键字,你可以使用类:

class Person {
  name;

  setName(name) {
    this.name = name;
    this.doStuff();
  }
  doStuff() {
    //...
  }
}

使用类的明显缺点是任何属性或函数都必须使用this访问。this关键字的优点是很清楚地知道您引用的是类属性或函数,而不是函数中的局部属性或函数。
有些人在顶部使用varlet

setName(name) {
  let t = this;
  t.name = name;
  t.doStuff();
}

尽管如此,许多人还是喜欢使用函数来定义某种类,因为这样不需要this来获取函数作用域中的变量属性。将其放入模块中,您仍然可以像包含类一样包含这些属性。
如果我能为Javascript的未来许个愿,那就是找到某种方式,让this以某种方式隐式引用类,从而拥有更小的代码风格、更少的标记和更容易的可读性。

相关问题