JS模拟私有属性和方法
2018-01-22 11:13
134 查看
模拟私有属性和方法
概述
我们知道,在JS中,是没有明确定义私有属性或私有方法的语法的,通常约定在属性和方法前加下划线来告知开发者这是一个私有的属性或变量,如果需要创造出私有属性、方法,则需要一些小技巧。 在JS中,分为全局作用域和函数作用域,在函数内定义的属性和方法,都只能在当前函数内被访问到,在外部不能被访问,所以简单来说,在函数内部定义的属性和方法,都可以成为私有的。 当然,我们还可以提供一些公有的属性、方法(或者叫特权方法)去访问私有的属性和方法,但是常规来讲,既然属性、方法已经被私有,怎么还能让他被公有方法所访问?答案是:闭包。闭包的定义在此不做阐述,直接看例子。var Animal = ( function() { function Animal(age) { this.age = age; } /* 这里有两个私有属性和一个私有方法,分别用下划线做标识。 */ _climb = true; _name = '动物'; function _canClimb() { if (_climb) { console.log(_name + '会爬树'); } else { console.log(_name + '不会爬树'); } } Animal.prototype.eat = function() { console.log('吃饭'); }; /* 在函数的原型上,访问私有方法或属性。 这里可以访问是因为在这个匿名函数的作用域内定义的方法是可以访问到当前函数作用域内的所有属性和方法的。 通过设置set get函数,来访问这些私有属性、方法。如果不提供set get函数,则私有属性、方法就不会被外部所访问到。 */ Animal.prototype.isCanClimb = function() { _canClimb(); }; Animal.prototype.setClimb = function(value) { _climb = value; }; Animal.prototype.getClimb = function() { console.log(_climb); }; Animal.prototype.setName = function(value) { _name = value; }; Animal.prototype.getName = function() { console.log(_name); }; return Animal; } )(); var cat = new Animal(24); cat.isCanClimb(); // 动物会爬树 cat.setName('猫咪'); cat.isCanClimb(); // 猫咪会爬树 cat.setClimb(false); cat.isCanClimb(); // 猫咪不会爬树/* 上面的例子是通过构造函数的方式创建 下面的例子是普通对象创建私有属性、方法 */
var transformers = ( function() { /* 私有方法和属性,外部不能直接访问 可以通过setget函数访问 */ var _hideSkill = '变身'; function _transform() { console.log('开始'+ _hideSkill); } return { name: '变形金刚', fly: function() { console.log('开始飞'); }, transform: function() { _transform(); }, setHideSkill: function(value) { _hideSkill = value; }, getHideSkill: function() { return _hideSkill; } } } )();
详情关注博客 https://mmmaming.github.io/[/code]
相关文章推荐
- js面向对象之公有、私有、静态属性和方法详解
- js--属性和方法(私有/公有)
- js面向对象之公有、私有、静态属性和方法详解
- js属性和方法的可见性:私有属性(方法),实例属性(方法),类属性(方法)
- js面向对象之公有、私有 、静态方法和属性,以及特权方法
- js基础知识温习:Javascript中如何模拟私有方法
- js公有、私有、静态属性和方法
- JS实现类的公有、私有、静态方法/属性
- javascript使用闭包模拟对象的私有属性和方法
- js 对象方法、类方法、原型方法的区别;私有属性、公有属性、公有静态属性的区别
- javascript使用闭包模拟私有属性和方法
- js面向对象的公有、私有属性和方法
- js公有、私有、静态属性和方法的区别
- js面向对象的公有、私有属性和方法
- js 对象方法、类方法、原型方法的区别;私有属性、公有属性、公有静态属性
- JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
- js 对象方法、类方法、原型方法的区别;私有属性、公有属性、公有静态属性的区别
- js面向对象之公有、私有、静态属性和方法详解
- js--属性和方法(私有/公有)
- JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法