直接使用new Object()javascript
var obj = new Object();
使用空的{}大括號php
var obj2 = {};
咱們要爲建立的對象增長屬性和訪問屬性的值!java
JavaScript是弱類型的語言,能夠動態的添加屬性。markdown
obj.age = 20; obj.name = "zhongfucheng"; obj.say = function () { alert("hello"); };
var aa = obj.age; var bb = obj.name;
var aa = [obj["age"]]; var bb = [obj["name"]];
使用function來模擬建立類,function充當了構造函數函數
//測試函數 function test() { var teacher = new Teacher(); } //使用function來模擬類 function Teacher() { }
上面的function來模擬類很容易和函數混淆。測試
咱們通常這樣作:用一個變量記住一個匿名的function當作是類,function充當了構造函數this
function test() { var teacher = new Teacher(); } var Teacher = function () { };
使用JSON語法來建立類,也就是對象直接量定義方法spa
var obj = { age: 20, str: "zhongfucheng", method:function () { alert("aaa"); } };
咱們建立公有屬性應該在類中指定,建立公有方法應該使用原型對象prototypeprototype
prototype定義的屬性就相似於Java的靜態成員:在原型對象上定義了屬性,擁有這個原型對象的function所建立的對象也擁有定義的屬性!因此,咱們方法中就使用prototypecode
var obj = function Teacher(name) { this.name = name; if( typeof obj._init=="undefined") { obj.prototype.setName = function (name) { this.name = name; }; obj.prototype.getName = function () { alert(this.name); }; } obj._init = true; };
建立兩個不一樣的Teacher對象,name屬性是不同的。而它們共享同一份setName()和getName()方法
值得注意的是:prototype定義的屬性只可讀的。若是你想要使用具體對象寫prototype的屬性,實際上並非寫,而是從新爲該類定義了一個同名(和prototype同名)的屬性。在讀取同名屬性的時候,優先讀取對象上的屬性,而不是prototype的。
咱們在Java中,定義私有屬性是經過關鍵字private來修飾的。。
在JavaScript中是沒有這樣的關鍵字的,咱們須要這樣作:定義在方法內【也就是function內部,也能夠看做成構造函數】的變量,就是私有變量。
var obj = function Teacher(name) { //這是私有屬性,外界不能訪問 var age = 23; //這是公有屬性,外界能夠訪問 this.name = name; //想要訪問私有變量age,只能在這裏編寫方法來訪問。其他的地方都不行! //咱們一般就是在這裏編寫公有方法來訪問私有屬性 };
在JavaScript中定義靜態屬性其實就是經過prototype原型對象來定義的。
定義靜態的時機:
//靜態屬性TYPE Book.TYPE = 「IT」; Book.print = function(){alert(Book.TYPE);}