js面向对象的几种写法

有段时间没写js了,复习了一下js相关的东西,把面向对象的部分挑出来做个记录。以下代码综合别的博客,但都是经过自己验证。

1,工厂方式

var Circle = function(){

var obj =  new Object();
    obj.PI = 3.14;

obj.area = function(r){
        return this.PI * r * r;
    }

return obj;
}
var c = new Circle();
alert(c.area(1.0));//结果为1

2,比较正规的写法 (构造函数的方式)

function Circle(r){
    this.r = r;
}

//静态变量
Circle.PI = 3.14;

//原型方法
Circle.prototype.area = function(){
    return Circle.PI * this.r * this.r ;
}

var c = new Circle(3);

console.log(c.area()); //结果为28.259999999999998

总结 : 无需在函数的内部重新创建对象,而使用this指代,并且函数无需明确的return

3,json写法

var Circle = {
    "PI" : 3.14,
    "area" : function(r){
        return this.PI * r * r;
    }
};

console.log(Circle.area(2)); //结果为:12.56

第三种写法的小实例

var show = {

btn : $(‘.div‘),
    init : function(){
        var that = this;
        alert(this);
        this.btn.click(function{
            that.change();
            alert(this);
        });
    },
    change : function(){
        this.btn.css({‘background‘:‘green‘});
    }
}

show.init();//注意其中this的指向问题

4,其实和第一种实质是一样的

var Circle = function(r){
    this.r = r;
}

Circle.PI = 3.14;
Circle.prototype = {
    area : function(){
        return this.r * this.r * Circle.PI;
    }
}

var obj = new Circle(4);

console.log(obj.area()); //结果为:50.24

5, 最后一种

var Circle = new Function("this.PI = 3.14;this.area = function(r){return r*r*this.PI;}");
obj = new Circle();

console.log(obj.area(4)); //结果为:50.24

总结:个人不是很推荐这种写法,有些混乱。

其中我个人比较喜欢的写法如下:

function Circle(r){
    this.r = r;
}

// 静态变量
Circle.PI = 3.14;
//原型方法
Circle.prototype.area = function(){
    return this.r * this.r * Circle.PI;
}

var obj = new Circle(4);

console.log(obj.area());  //结果为:50.24

可以看到一样的结果,感觉这种写法更符合我的习惯,当然js是比较自由的,只要语法没有错误,你可以选择任何一和自己喜欢的方式去实现自己想要的效果。

时间: 2024-12-24 13:04:03

js面向对象的几种写法的相关文章

js面向对象的五种写法

第一种: //第1种写法 function Circle(r) { this.r = r; } Circle.PI = 3.14159; Circle.prototype.area = function() { return Circle.PI * this.r * this.r; } var c = new Circle(1.0); alert(c.area()); 第二种: //第2种写法 var Circle = function() { var obj = new Object(); o

JS面向对象的几种写法2

//定义Circle类,拥有成员变量r,常量PI和计算面积的成员函数area() 1.工厂方式 var Circle = function() { var obj = new Object(); obj.PI = 3.14159; obj.area = function( r ) { return this.PI * r * r; } return obj; } var c = new Circle(); alert( c.area( 1.0 ) ); 2.比较正规的写法 function Ci

js面向对象初步探究(上) js面向对象的5种写方法

很长一段时间看网上大神的JS代码特别吃力,那种面向对象的写法方式让人看得云里来雾里去.于是就研究了一下JS面向对象,由于是初学,就将自己在网上找到的资料整理一下,作为记忆. js面向对象的5种写方法:(来自http://www.iteye.com/topic/434462) 首先 定义circle类,拥有成员变量r,常量PI和计算面积的成员函数area(): //第1种写法 function Circle(r) { this.r = r; } Circle.PI = 3.14159; Circl

可拖动弹窗的JS和jQuery两种写法

最近在慕课网上学习了一个网页可拖动对话框js实现的演示视频,这个demo中的例子是百度首页登录按钮的弹窗,如下图: 当点击左上角的登录按钮时,弹窗出现并自动居中,同时窗口可拖动的范围被限制在了可视区域内,即浏览器视窗的上下左右边界,弹窗无法移出移动出四个边界,也不会出现滚动条. 另一个效果就是,当改变窗口大小时,对话框自动居中. 这个视频中用了原生js,jQuery两种写法实现案例,但本质上,对话框居中,限制拖动范围的的计算思路是一致的. 为了简化页面,总结核心思路,我重新写了一个小demo,界

JS 中面向对象的5种写法和拓展JS对象的写法

面向对象的JAVA  最开始当然是对象的定义了 收集了以下的五种写法 //第1种写法 function Circle(r) { this.r = r; } Circle.PI = 3.14159; Circle.prototype.area = function() { return Circle.PI * this.r * this.r; } var c = new Circle(1.0); alert(c.area()); //第2种写法 var Circle = function() {

归纳下js面向对象的几种常见写法

//定义Circle类,拥有成员变量r,常量PI和计算面积的成员函数area() 1.工厂方式 var Circle = function() { var obj = new Object(); obj.PI = 3.14159; obj.area = function( r ) { return this.PI * r * r; } return obj; } var c = new Circle(); alert( c.area( 1.0 ) ); 2.比较正规的写法 function Ci

js面向对象的几种常见写法

下面是一个简单的js对象:定义Circle类,拥有成员变量r,常量PI和计算面积的成员函数area(),常用为第一种和第三种. 1.工厂方式 var Circle = function() { var obj = new Object(); obj.PI = 3.14159; obj.area = function( r ) { return this.PI * r * r; } return obj; } var c = new Circle(); alert( c.area( 1.0 ) )

js类的几种写法

我们常用的有以下几种方法来用JavaScript写一个“类”: 1. 构造函数(public属性和方法) 1: function Person(iName, iAge){ 2: this.name=iName; //public 3: this.age=iAge; //public 4: this.ShowStudent=function(){ //public 5: alert(this.name); 6: }; 7: } 缺点很明显,类的属性和方法,很容易被外部修改. 以上的属性和方法都是p

JS 定时器的4种写法及介绍

JS提供了一些原生方法来实现延时去执行某一段代码,下面来简单介绍一下setTiemout.setInterval.setImmediate.requestAnimationFrame. 一.什么是定时器 JS提供了一些原生方法来实现延时去执行某一段代码,下面来简单介绍一下 setTimeout: 设置一个定时器,在定时器到期后执行一次函数或代码段 var timeoutId = window.setTimeout(func[, delay, param1, param2, ...]); var