首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JSON表示法,如何在javascript中创建公共方法?

使用JSON表示法,如何在javascript中创建公共方法?
EN

Stack Overflow用户
提问于 2010-12-22 00:45:13
回答 3查看 1.9K关注 0票数 1

在此示例中:

代码语言:javascript
复制
var circle = {
  radius : 9,
  getArea : function()
  {
    return (this.radius * this.radius) * Math.PI;
  }
};

this page的封装主题来看,getArea是私有的,它是如何公开的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-12-22 00:47:26

这不是JSON notation,那是JavaScript对象文字表示法。(JSON是对象文字表示法的子集。它不允许使用函数,需要双引号,并且不支持八进制或十六进制。)

getArea不是私有的,任何人都可以调用它。你引用的页面是完全错误的。如果您希望在JavaScript中使用真正私有方法的模式,可以使用here's a roundup,它考虑了各种权衡(包括最常见的形式--克罗克福德模型的内存开销)。

票数 7
EN

Stack Overflow用户

发布于 2010-12-22 01:13:39

正如T.J.克劳德所说..。这不是JSON。我认为问题可能在于您的circle对象的getArea属性被设置为getArea函数返回的任何内容。这意味着circle.getArea()不能工作,因为circle.getArea是一个数字。这是错误的,但我认为它离你试图实现的目标更近了一步(我将在这之后展示更好的方法):

代码语言:javascript
复制
var circle = {
  radius : 9,
  getArea : function(){
    return Math.PI * 9 * 9;  
  }
};

alert(circle.radius);
alert(circle.getArea());

上面的重点是注意我在对象中定义getArea函数的方式。这可能很有用,但问题是get area函数不能访问半径变量,因为像circle这样的对象没有自己的作用域。如果你尝试:

代码语言:javascript
复制
var myObj = {test:this};

alert(myObj.this);

你会看到[object DOMWindow]

那么如何创建一个具有radius属性和getArea方法的对象圆呢?有很多种方法。一种方式是这样的:

代码语言:javascript
复制
function Circle(r){
   var c = this;
   this.radius = r;
   this.getArea = function(){
     return Math.PI * c.radius * c.radius;
   }
}

var circle = new Circle(10);
document.write(circle.getArea()+"<br/>");

circle.radius = 20;

document.write(circle.getArea()+"<br/>");

var otherCircle = new Circle(1);
document.write(otherCircle.getArea()+"<br/>");

我已经创建了一个jsFiddle of the above

这也可以使用prototype属性来实现:

代码语言:javascript
复制
function Circle(r){
   this.radius = r;
}

Circle.prototype.getArea = function(){
   return Math.PI * this.radius * this.radius;
}

var circle = new Circle(10);
document.write(circle.getArea()+"<br/>");

circle.radius = 20;

document.write(circle.getArea()+"<br/>");

var otherCircle = new Circle(1);
document.write(otherCircle.getArea()+"<br/>");
票数 1
EN

Stack Overflow用户

发布于 2010-12-22 00:54:22

javascript中没有私有方法或属性这样的东西。

每件事都是公开的,但常见的做法是将任何以_开头的内容视为私有,但这只是约定,并不是由语言强制执行的。

要拥有私有的方法和属性,你需要真正的类来定义它们,而javascript没有真正的类。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4501689

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档