JS对象的创建方式

时间: 2020-02-24阅读: 269标签: 对象

一、字面量方式

var obj = {
    name: 'mm',
    age: 18,
    sayName: function() {
        console.log(this.name);
    }
}

问题:创建多个对象时会造成代码冗余,很占内存空间。


二、工厂模式

function createToy(name) {
    var o = new Object();
    o.name = name;
    o.say = function() {
        console.log(this.name);
    }
    return o;
}
var toy1 = createToy('car');
toy1.say();
var toy2 = createToy('taxi');
toy2.say();
var toy3 = createToy('bus');
toy3.say();
console.log(toy1 instanceof Object);
console.log(toy2 instanceof Object);
console.log(toy3 instanceof Object);

问题:虽然解决了对象字面量创造对象冗余的问题,但是存在对象识别的问题


三、构造函数模式

function Toy(name) {
    this.name = name;
    this.say = function() {
        console.log(this.name);
    }
}
var toy1 = new Toy('car');
var toy2 = new Toy('car');
console.log(toy1.constructor);
console.log(toy2.constructor);
console.log(toy1.say === toy2.say); // false

问题:解决了工厂模式的问题,但是相同方法重复创建就浪费了内存空间。


四、原型模式

function Person() {};
Person.prototype = {
    constructor: Person,
    name: 'mm',
    friends: ['mike','helen'],
    say: function() {
        console.log(this.name);
    }
}
var toy1 = new Person('train');
var toy2 = new Person('bus');
toy1.friends.push('suhai');
console.log(toy1.friends);
console.log(toy2.friends);

问题:共享方法,解决了构造函数的问题。但是当前实例的引用类型的属性被所有实例共享


五、组合模式(构造函数+原型模式)

function Person(name) {
    this.name = name;
    this.friends = ['mike','helen'];
};
Person.prototype = {
    constructor: Person,
    say: function() {
        console.log(this.name);
    }
}
var toy1 = new Person('train');
var toy2 = new Person('bus');
toy1.friends.push('suhai');
console.log(toy1.friends);
console.log(toy2.friends);

这是常用的创建方式。
通过构造函数模式定义实例属性,通过原型模式定义方法和共享的属性。


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/8739

关闭

JS中的函数与对象

创建函数的三种方式:函数声明、函数表达式、函数对象方式;创建对象的三种方式:字面量方式、工厂模式创建对象、利用构造函数创建对象(常用)

node中的全局对象是什么?

JavaScript中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。那么在node中全局对象是什么?在浏览器JavaScript中,通常window是全局对象, 而Node.js中的全局对象是globa,所有全局变量(除了 global 本身以外)都是global对象的属性。

JS 的 Document对象

Document 对象是是window对象的一个属性,因此可以将document对象作为一个全局对象来访问。当浏览器载入 HTML 文档, 它就会成为 Document 对象。Document对象的 属性和方法

如何将JSON反序列化为JavaScript对象?

JSON(JavaScript Object Notation)用于与Web服务器或RESTFull API交换数据,从Web服务器接收的数据始终是字符串。为了使用这些数据,您需要使用JSON.parse()解析数据,它将返回一个JavaScript对象或对象数组。

Window对象在前端领域的角色

在js的领域,window对象有着双重角色,既是用来访问浏览器窗口的接口,又是Global对象。也正因为此,所有全局作用域中声明的变量、函数都会变成window对象的属性和方法。

javascript如何判断对象是否相等?

JavaScript作为一个基于对象(没有类的概念)的语言,从入门到精通到放弃一直会被对象这个问题围绕。下面我们就来看一下如何判断对象是否相等。

使用Js的Proxy监听对象属性变化并进行类public/private的访问控制

Proxy是ES6的引入的一个对象监听机制。可视为JavaScript对象的一个代理中间件。用户在访问对象时,会触发自定义行为。Proxy最简单的用法是可以监听对象属性的变化

javascript中如何创建对象?

javascript是一种“基于prototype的面向对象语言“,与java有非常大的区别,无法通过类来创建对象。那么,既然是面象对象的,如何来创建对象呢?

javascript的navigator对象及属性userAgent

js test()方法用于检测一个字符串是否匹配某个模式.如果字符串中有匹配的值返回 true ,否则返回 false

javascript Es5面向对象和 Es6面向对象

javascript es6之前的面向对象方法:一般使用构造函数来实现。通过ES6的class 类来创建结果和上面用构造函数创建的是一样的;当然里面也可以写方法 function;用构造函数本身 直接点 ▪ 上的 属性或者 function() 函数 叫静态属性或方法; 一般不会这样做;

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!