Home > Web Front-end > JS Tutorial > body text

Javascript object-oriented (2) encapsulation code

高洛峰
Release: 2017-01-04 09:22:26
Original
1120 people have browsed it

Write a small example:

The first step: Make a "mobile phone class"

var MobilePhone = (function(){ 
    ………… 
})()
Copy after login

The second step: Consider this class and the private attributes of those classes that are needed. Here I What I want to define is the number of mobile phones that come out of the instance

var MobilePhone = (function(){ 
//私有属性 
var count = 0; //代表手机的数量 
})()
Copy after login

The third step: Create a constructor, that is, an initialization of the new object generated when the instance is instanced, such as the initialization of attributes and methods; in this example, Each mobile phone will have color, size, and price attributes. The constructor here is also a closure, so count can be accessed, and the value of count will be stored in memory for a long time (as long as the reference exists)

var MobilePhone = (function(){ 
//私有属性 
var count = 0; //代表手机的数量 
     
    //构造函数 
    var creatphone = function(color,size,price){ 
        count++; 
        this._color = color; //手机的颜色 
        this._size = size; //手机的大小 
        this._price = price; //手机的价格 
        this.index = count; //手机索引,是第几台创建的手机手象 
     } 
})()
Copy after login

Four steps: Common methods:
This is a method that can be used by all mobile phone objects from the instance. Here, the mobile phone should be able to change the price, color, size, and also display the size, color, and price.
The common methods here should be placed in the "prototype object":
1. All objects instantiated by this constructor, that is, the mobile phone created, can use the methods in the "prototype object".
2. If placed in the constructor, every time a mobile phone object is instantiated, a bunch of repeated methods will be generated, occupying memory.
3."constructor":creatphone explanation:
Because creatphone.prototype ={...} quite overwrites the reference to the previous prototype object. In order to associate the prototype object with the constructor, the attribute "constructor":creatphone is set.

var MobilePhone = (function(){ 
//私有属性 
var count = 0;//代表手机的数量 
    //构造函数 
     var creatphone = function(color,size,price){ 
        count++; 
        this._color = color; //手机的颜色 
        this._size = size; //手机的大小 
        this._price = price; //手机的价格 
        this.index = count; //手机索引,是第几台创建的手机手象 
      } 
//公有方法,存放在原型对象中 
creatphone.prototype = { 
      "constructor":creatphone, 
      //获取手机颜色 
"getColor" : function(){ 
return this._color; 
}, 
      //设置手机颜色 
"setColor" : function(color){ 
this._color = color; 
}, 
      //获取手机大小 
"getSize" : function(){ 
return "width:"+this._size.width + " height:" + this._size.height; 
}, 
      //设置手机大小 
"setSize" : function(size){ 
this._size.width = size.width; 
this._size.height = size.height; 
}, 
      //获取手机价格 
"getPrice" : function(){ 
return this._price; 
}, 
      //设置手机价格 
"setPrice" : function(price){ 
this._price = price 
} 
} 
})()
Copy after login

Step 5: Privileged method, that is, there needs to be a method that can access the private variables of the class. It is how many mobile phone objects come out of the instance

var MobilePhone = (function(){ 
//私有属性 
var count = 0;//代表手机的数量 
var index = 0;//代表手机的索引 
    //构造函数 
    var creatphone = function(color,size,price){ 
        count++; 
        this._color = color; //手机的颜色 
        this._size = size; //手机的大小 
        this._price = price; //手机的价格 
        this.index = count; //手机索引,是第几台创建的手机手象 
      }     //公有方法,存放在原型对象中 
creatphone.prototype = { 
"constructor":creatphone, 
"getColor" : function(){ 
return this._color; 
}, 
"setColor" : function(color){ 
this._color = color; 
}, 
"getSize" : function(){ 
return "width:"+this._size.width + " height:" + this._size.height; 
}, 
"setSize" : function(size){ 
this._size.width = size.width; 
this._size.height = size.height; 
}, 
"getPrice" : function(){ 
return this._price; 
}, 
"setPrice" : function(price){ 
this._price = price 
} 
} 
//特权方法 
creatphone.get_count_index = function(){ 
return count 
} 
return creatphone; 
})()
Copy after login

Use a mobile phone class encapsulated above to test

var anycall = new MobilePhone(); //实例一个三星手机对象 
var HTC = new MobilePhone(); //实例一个HTC手机对象 
var Iphone4s = new MobilePhone(); //实例一个苹果4S手机对象 
console.log("三星是第:"+anycall.index+"台"); //FF的控制台输出三星手机对象是第几台创建的,即索引; 
console.log("HTC是第:"+HTC.index+"台"); //FF的控制台输出HTC手机对象是第几台创建的,即索引; 
console.log("Iphone4s是第:"+Iphone4s.index+"台"); //FF的控制台输出个苹果4S手机对象是第几台创建的,即索引; 
console.log("总共造出了"+MobilePhone.get_count_index()+"手机"); //FF的控制台输出总共创建了几台手机; 
console.log(anycall.constructor === MobilePhone); //实例出来的对象,的原形象中的constructor,是否还指向MobilePhone
Copy after login

The results are as follows, completely correct:

 Javascript 面向对象(二)封装代码

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template