js建立对象的几种形式

1.工场形式

例子:

function createPerson(name,age){
    var o = new Object();
    o.name = name;
    o.age = age;
    o.sayName = function () {
        alert(this.name);
    }
    return o;    
}
var person1 = createPerson("EvanChen",18,"Software Engineer");//建立一个对象

题目:没有处理对象辨认题目

    alert(person1 instanceof createPerson)//fasle 会发明实在并不存在一个createPerson类

2.组织函数形式

例子:

    function Person(name,age){
        this.name = name;
        this.age = age;
        this.sayName = function(){
            alert(this.name);
        }
    }
    var p1 = new Person('EvanChen',18);//建立一个Person类

用new操作符挪用组织函数阅历了以下4个步骤:

  • (1)建立一个新对象

  • (2)将组织函数的作用域赋给新对象

  • (3)实行组织函数中的代码

  • (4)返回新对象

处理了工场形式兑现辨认题目:

alert(typeof(p1));// Person
alert(p1 instanceof(Person));// true

3.原型形式

例子:

    function Person(){        
    }
    Person.prototype.name = "EvanChen";
    Person.prototype.age= 18;
    Person.prototype.sayName= function(){
        alert(this.name);
    }
    
    var p1 = new Person();
    p1.sayName(); //"EvanChen"
    
    var p2 = new Person();
    p2.sayName(); //"EvanChen"
    
    alert(p1.sayName == p2.sayName); //true
    

将一切属性和要领都加在Person的prototype属性中,因而新对象具有雷同的属性和要领。

4.组合运用组织函数形式和原型形式(引荐)

例子:

function Person(name,age){
    this.name = name;
    this.age = age;
    this.friends = ["Shelby","Court"];
};

Person.prototype = {
    constructor:Person,
    sayName:function(){
        alert(this,name);
    }
}
//Person.prototype.sayName = function(){
//   return this.name;
//};

var person1 = new Person("EvanChen",18);
var person2 = new Person("Greg",16);

person1.friends.push("Van");
alert(person1.friends);//"Shelby,Court,Van"
alert(person2.friends);//"Shelby,Court"
alert(person1.friends == person2.friends);//false
alert(person1.sayName == person2.sayName );//true

一切实例同享原型中的属性constructor和要领sayName(),雷同的属性在组织函数中定义。

5.动态原型形式(引荐)

例子:

function Person(name,age){
    this.name = name;
    this.age = age;
    if (typeof this.sayName != "function"){
        Person.prototype.sayName = function(){
            alert(this.name);
        };
    }
};
var person1 = new Person("EvanChen",18);
person1.sayName();

在sayName()要领不存在的情况下,才会将它增加到原型中,当原型完成初始化后,可以马上在一切实例中获得同享。

6.寄生组织函数形式

基本思想是:建立一个函数,该函数的作用仅仅是封装对象的代码,然后再返回新构建函数的对象
例子:

function SpecialArray(){
    var values = new Array();//建立数组
    values.push.apply(values,arguments);//增加值
    values.toPipedString = function () {
        return this.join("|");
    }//增加要领
    return values//返回数组    
}

var colors = new SpecialArray("red","blue","green");
alert(colors.toPipedString());//red|blue|green

组织函数返回的对象与组织函数外部建立的对象没有什么差别,因而不能依靠instanceof操作符来肯定对象范例。

7.稳妥组织函数形式

稳妥对象指的是没有大众属性,而且其要领也不再援用this的对象。稳妥对象最适合在一些平安的环境中,或许防备数据被其他应用程序删改时运用。

例子:

function Person(name, age) {
    //建立要返回的对象
    var o = new Object();
    //定义私有变量和函数
    o.sayName = function (){
        alert(name);
    }
    return o;
}

var person1 = Person("EvanChen", 18);
person1.sayName();//"EvanChen"

在这类形式建立的对象中,除了运用sayName()要领外,没有其他要领接见name的值。

    原文作者:Evan_Chen
    原文地址: https://segmentfault.com/a/1190000004612540
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞