gpt4 book ai didi

Javascript 对象属性和函数

转载 作者:搜寻专家 更新时间:2023-11-01 05:06:33 24 4
gpt4 key购买 nike

在 JavaScript 中,我看到了几种不同的方式,某些任务可以在一个对象中执行,例如,我下面的对象 Egg。

谁能告诉我每一个之间的区别,为什么我会使用一个而不是另一个等

 var Egg = function(){

//Properties

var shell = "cracked" // private property

this.shell = "cracked" // public property

shell: "cracked" // what is this??

//functions

function cook(){

//standard function
}

cook: function(){
//what kind of function is this?
}

//not sure what this is

details: {
//What is this? an array :S it holds 2 elements?
cost: 1.23,
make: 'Happy Egg';
}




}

最佳答案

您的代码片段不太有效,但它提出了一些问题:

属性初始化器、对象初始化器

您已经问过shell: cracked 是什么。它是一个属性初始值设定项。您可以在 object initializers 中找到它们(又名“对象字面量”),写成这样:

var obj = {
propName: "propValue"
};

相当于:

var obj = {};
obj.propName = "propValue";

以上两者都创建了一个对象,该对象具有名为 propName 的属性,该属性具有字符串值 "propValue"。请注意,this 不会出现在其中。

函数

相对于对象,函数通常会在几个地方出现:

构造函数

构造函数,它们是您通过new operator 调用的函数.这是一个例子:

// Constructor function
function Foo(name) {
this.name = name;
}

// Usage
var f = new Foo("Fred");

注意关键字 this 的使用。那就是您看到的地方(最有可能)。当您通过 new 调用构造函数时,this 引用由 new 运算符创建的新对象。

this 是 JavaScript 中的一个模糊概念(与 C++、Java 或 C# 中的 this 完全不同),我推荐这两个(咳) 我博客上的帖子:

builder /工厂函数

您不必使用构造函数和new,另一种模式使用“builder”或“factory”函数代替:

// A factory function
function fooFactory(name) {
var rv = {}; // A new, blank object

rv.name = name;

return rv;
}

// Usage
var f = fooFactory("Fred");

私有(private)属性

您在问题中提到了“私有(private)”属性。 JavaScript 根本没有私有(private)属性(但是,它们正在路上)。但是你看到人们通过将他们在对象上使用的函数定义为在包含其他人看不到的变量的执行上下文(通常是对构造函数或工厂函数的调用)上的闭包来模拟它们,像这样:

// Constructor function
function EverUpwards() {
var counter = 0;

this.increment = function() {
return ++counter;
};
}

// Usage:
var e = new EverUpwards();
console.log(e.increment()); // "1"
console.log(e.increment()); // "2"

(该示例使用构造函数,但您可以使用工厂函数执行相同的操作。)

请注意,即使我们分配给 increment 的函数可以访问 counter,但其他任何东西都不能。所以 counter 实际上是一个私有(private)属性。这是因为该函数是一个闭包。更多:Closures are not complicated

关于Javascript 对象属性和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11565846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com