js创建对象的高级模式
hello,安瑞万。第一次写博客,心情很激动啊。要是说的不好,你来打我啊?反正你也不知道我家地址。好了,不扯了。进入正题:要是写的不好欢迎大家来批评指导。
what:创建对象的三种模式
--1,门户大开性 function Book(title){this.title = title} Book.prototype.dispaly = function(){console.log(this.title)} 缺点:无法对用户传入的值-title进行控制,如果你得程序需要对值进行严格控制,这样的模式明显就是问题了
--2,通过getter,setter方法 --缺点:虽然程序实现了setTitle和getTitle两个方法,但是程序员可能由于有意无意对其进行设置,而忽略setTitle.这时候就不能进行限制了。具体大家可以参考设计模式中对于创建对象的讲解
--3 创建对象的高级模式
var Book = (function () {
function check(val) {
if (typeof(val) != "string") {
return false;
}
else {
return true;
}
}
return function (title) {
var title;
this.getTitle = function () {
return title
}
this.setTitle = function (newTitle) {
if (!check(newTitle)) {
throw new Error(newTitle + "is Invalid");
}
else {
title = newTitle;
}
}
this.setTitle(title);
}
})();
其中里边的check()方法用来判断传入的title是否为字符串,在return返回的函数中定义局部变量title,保证外部不能直接操作这个值。只能通过setTitle方法进行操作。而获取只能通过getTitle方法进行操作,可以严格检测传入进来的title是否符合要求。
作为一个前端小菜,写的东西肯定会有问题,希望大家多多包涵,欢迎留下您宝贵的意见。
js创建对象的高级模式的更多相关文章
- JS创建对象的七大模式
1. 工厂模式 function createPerson(name, age, job){var o = new Object();o.name = name;o.age = age;o.job = ...
- JS创建对象之原型模式
一.原型对象 只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象:在默认情况下,所有原型对象都会 自动获得一个constructor(构造函 ...
- JS创建对象之构造函数模式
function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.sayName = f ...
- JS创建对象之工厂模式
function createPerson(name, age, job) { var o = new Object(); o.name = name; o.age = age; o.job = jo ...
- javascript(js)创建对象的模式与继承的几种方式
1.js创建对象的几种方式 工厂模式 为什么会产生工厂模式,原因是使用同一个接口创建很多对象,会产生大量的重复代码,为了解决这个问题,产生了工厂模式. function createPerson(na ...
- js创建对象的三种方式和js工厂模式创建对象
文章地址: https://www.cnblogs.com/sandraryan/ 创建对象 创建对象的三种方式 构造函数 ,是一种特殊的方法.主要用来在创建对象时初始化对象 1. 调用系统的构造函数 ...
- 面向对象的程序设计之JS创建对象的9种模式及其优缺点
目录 1.new Object () 2.字面式创建对象 3.工厂模式 4.构造函数模式 4.1.将构造函数当作函数 4.2.构造函数的问题 5.原型模式 5.1.理解原型对象 5.2.原型与in操作 ...
- JS创建对象的方式有几种
相信但凡作为一个前端工程师,都被面试到过这个面试题目,HR考察的就是对oop思想的理解. 作为一个从后端转过来的怂逼,oop一直是心中的永远的痛啊. 这几天一直在通读js高级程序设计,重复理解js创建 ...
- js 创建对象的多种方式
参考: javascript 高级程序设计第三版 工厂模式 12345678910 function (name) { var obj = new Object() obj.name = name o ...
随机推荐
- oracle(sql)基础篇系列(四)——数字字典、索引、序列、三范式
数字字典表 --查看当前用户下面有哪些张表 select * from user_tables; select table_name from user_tables; --查看当前用户下面有 ...
- 【转】Oracle索引失效问题
转自:http://www.cnblogs.com/millen/archive/2010/01/18/1650423.html 失效情况分析: <> 单独的>,<,(有时会用 ...
- android 腾讯x5内核 浏览器
1.浏览器内核: 主流浏览器内核介绍(前端开发值得了解的浏览器内核历史) 浏览器内核历史介绍: 在android 4.4之前,浏览器用的还是webkit 在android 4.4之后,google就抛 ...
- 第一章 DeepLab的创作动机
这一段时间一直在做深度学习方面的研究,目前市场上的深度学习工具主要分为两大块.一块是基于Python语言的theano:另一块是可以在多个语言上使用并能够在GPU和CPU之间随意切换的Caffe.但是 ...
- Nonblocking I/O and select()
This sample program illustrates a server application that uses nonblocking and the select() API. Soc ...
- 反编译apk时遇到的问题
第一次尝试反编译的时候遇到如下问题:Input file (ganzhou) was not found or was not readable 百度之后说是apktool版本2.0以上,编译命令变了 ...
- JS中检测数据类型的几种方式及优缺点【转】
1.typeof 用来检测数据类型的运算符 typeof value 返回值首先是一个字符串,其次里面包含了对应的数据类型,例如:"number"."string&quo ...
- Javascript的自执行函数
自执行函数其实也就是"立即执行的函数",它有四个特点:提高性能.利于压缩.避免冲突.依赖加载: 1.减少作用域查找 JS代码: // Anonymous function that ...
- Poco::JSON::Array 中object 设置preserveInsertionOrder 时,stringify出错-->深入解析
在使用poco version 1.6.0时 Poco::JSON::Array 在object 设置preserveInsertionOrder =true 时 调用 array.stringif ...
- 国内外三个不同领域巨头分享的Redis实战经验及使用场景
Redis不是比较成熟的memcache或者Mysql的替代品,是对于大型互联网类应用在架构上很好的补充.现在有越来越多的应用也在纷纷基于Redis做架构的改造.首先简单公布一下Redis平台实际情况 ...