對象是一組數據和方法的組合,在正規的面相對象語言中叫封裝。在js當中對象是一種特殊的數據類型,其自己並不具有做用域的範圍,她在整個做用域中參與運算。做用域規定了變量的可見範圍,在es5及如下的es規範當中,js只有函數做用域和全局做用域。做用域主要是針對變量的執行環境,變量的搜索遵循,做用域鏈的嵌套關係。
屬性追加函數
var obj = new Object() ;
obj.name = 'zhangsan' ;
obj.age = 22 ;
console.log(obj.name) ;
console.log(obj.age) ;this
工廠方式es5
function createObject()
{
let object = new Object() ;
object.name = 'zhangsan' ;
object.age = 22 ;
object.sayName = function(){
{
console.log(this.name) ;
}
return Object;
}
let obj1 = createObject();
let obj2 = createObject() ;
console.log(obj1.sayName(), obj2.sayName()) ;prototype
構造函數式code
function Person(name, age)
{
this.name = name ;
this.age = age ;
this.sayName = function()
{
console.log(this.name);
}
}
let per1 = new Person('zangsan',22);
let per2 = new Person('lisi', 22) ;
per1.sayName(); //zhangsan
per2.sayName(); //lisi對象
原型方式作用域
function Person(){}
Person.prototype.name = 'zhangsan';
Person.prototype.sayName = function(){
console.log(this.name)
}
let person = new Person()
person.sayName() //zhangsan原型
混合方式io
function Person(name, age)
{
this.name = name ;
this.age = age ;
Person.prototype.sayName = function(){
{
console.log(this.name);
}
}
let person = new Person('zhangsan', 22) ;
person.sayName();console
動態原型方式
function Person(name, age)
{
this.name = name ;
this.age = age ;
if(Person.flag = undefined)
{
Person.prototype.sayName = function(){
console.log(this.name);
}
}
}
let person = new Person('zhangsan', 22) ;
person.sayName() ; //zhangsan
對象字面量方式
let person = .{
name : 'zhangsan',
age : 22,
sayName: function(){
console.log(this.name);
}
}
注意:在全部對象的定義方式當中,混合方式和對象字面量的方式是比較推崇的作法 。