js-----对象的构造函数与私有属性
2017-12-04 16:05
267 查看
《开场白》
JavaScript 中的所有事物都是对象:字符串、数值、数组、函数…
此外,JavaScript 允许自定义对象。,那么如何创建对象呢,跟随我一起来看看这一篇文章吧!
2.使用函数来定义对象,然后创建新的对象实例
【一】
js中有对象 没有类(class),有构造函数(Constructor)。
很多语言中都是 类—>对象,而js中,对象不依赖于类而存在,js的对象只是一个”属性字典“,就像PHP的关联数组,因此 我们可以直接造对象,不要类。
var obj = {k:v , k:v };这种格式的对象,称之为json格式的对象
js中的对象 ,就是一组属性与值的集合,属性可以任意增减,方法和属性不必区分
【二】
所谓”构造函数”,其实就是一个普通函数,但是内部使用了this变量。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。 特点是直接将属性和方法赋值给this对象,没有return语句;
此外,要创建Dog的实例,必须使用new关键字,以Dog函数为构造函数,传递参数完成对象创建;实际创建经过以下4个过程:
1.创建一个对象
2.将函数的作用域赋给新对象(因此this指向这个新对象,如:t1)
3.执行构造函数的代码
4.返回该对象
【三】
这种方式的优点是实现了私有属性的隐藏,Person 的实例并不能直接访问love属性,只能通过特权函数getLove获取;
研发这种闭包方式的大牛Douglas Crockford也曾在博客中提到过这种方式。但是这种方式存在一些缺陷:
私有变量和特权函数只能在构造函数中创建。通常来讲,构造函数的功能只负责创建新对象,方法应该共享于prototype上。特权函数本质上是存在于每个实例中的,而不是prototype上,增加了资源占用。
《结束语》
~~~~啊啊啊,对与初学者的我,听起来真是是懵,关于对象的私有属性的实现,先说到这吧,还是继续学习才可以了解的更加深入!
JavaScript 中的所有事物都是对象:字符串、数值、数组、函数…
此外,JavaScript 允许自定义对象。,那么如何创建对象呢,跟随我一起来看看这一篇文章吧!
1.创建 JavaScript 对象
1.定义并创建对象的实例2.使用函数来定义对象,然后创建新的对象实例
【一】
//########################################定义并创建对象的实例 var original= {};//直接声明一个空对象 var cell = {num:1};//定义创建创建一个cell对象,有一个属性num //定义一个chicken 有两个属性wine, song(是一个匿名函数) var chicken = {wine:2,song:function(){alert('飞');}}; console.log(original); console.log(cell); console.log(chicken); alert(chicken.song());//弹出chicken对象的方法 //删除chicken对象一个方法 delete chicken.song; alert(chicken.song());//undefined //给original对象 增加一个属性 original.say =function(){ alert('我是有属性的对象了'); } alert(original.say());//弹出original的方法
js中有对象 没有类(class),有构造函数(Constructor)。
很多语言中都是 类—>对象,而js中,对象不依赖于类而存在,js的对象只是一个”属性字典“,就像PHP的关联数组,因此 我们可以直接造对象,不要类。
var obj = {k:v , k:v };这种格式的对象,称之为json格式的对象
js中的对象 ,就是一组属性与值的集合,属性可以任意增减,方法和属性不必区分
【二】
//###############################用函数来定义对象,再new出对象实例 function Dog(name){ this.name = name; this.bark = function(){ alert('汪汪'); } } //有了构造函数,可以以此为原型,创建多个类似的对象 var t1 = new Dog('小黄'); var t2 = new Dog('小黑'); console.log(t1.name);//-----------------------------小黄 //但是这里很轻易就改变了对象的属性,对与对象的私有属性不是保护的很好t1.name = "我不是小黄了"; console.log(t1.name)//------------------------------小黑
所谓”构造函数”,其实就是一个普通函数,但是内部使用了this变量。对构造函数使用new运算符,就能生成实例,并且this变量会绑定在实例对象上。 特点是直接将属性和方法赋值给this对象,没有return语句;
此外,要创建Dog的实例,必须使用new关键字,以Dog函数为构造函数,传递参数完成对象创建;实际创建经过以下4个过程:
1.创建一个对象
2.将函数的作用域赋给新对象(因此this指向这个新对象,如:t1)
3.执行构造函数的代码
4.返回该对象
2.私有属性的实现
通过闭包 来实现私有属性【三】
function Person(name,lover){ var love = lover; var nm = name; this.getLove = function (){ return love; } this.getName = function(){ return nm; } } var t = new Person('周杰伦','昆凌'); console.log(t); alert(t.love);//“undefined”不能直接访问对象的私有属性 t.love = '桂纶镁';//相当于直接给对象添加了这样一个属性 alert(t.love);//“桂纶镁”,这里已经不是原有对象的属性 console.log(t.getLove());//“昆凌”,只能通过getLove来访问私有属性
这种方式的优点是实现了私有属性的隐藏,Person 的实例并不能直接访问love属性,只能通过特权函数getLove获取;
研发这种闭包方式的大牛Douglas Crockford也曾在博客中提到过这种方式。但是这种方式存在一些缺陷:
私有变量和特权函数只能在构造函数中创建。通常来讲,构造函数的功能只负责创建新对象,方法应该共享于prototype上。特权函数本质上是存在于每个实例中的,而不是prototype上,增加了资源占用。
《结束语》
~~~~啊啊啊,对与初学者的我,听起来真是是懵,关于对象的私有属性的实现,先说到这吧,还是继续学习才可以了解的更加深入!
相关文章推荐
- js 对象方法、类方法、原型方法的区别;私有属性、公有属性、公有静态属性
- 【Effective Java】Ch2_创建销毁对象:Item3_通过私有构造函数或枚举类型来强化Singleton属性
- js对象、构造函数、命名空间、方法、属性
- js 对象方法、类方法、原型方法的区别;私有属性、公有属性、公有静态属性的区别
- js对象、构造函数、命名空间、方法、属性
- js中对象所属类、对象中原型属性以及构造函数三者的关系
- js 对象方法、类方法、原型方法的区别;私有属性、公有属性、公有静态属性的区别
- js中使用正则表达式(三)RegExp对象构造函数属性介绍
- js中对象的私有属性和公有属性
- js中构造函数只是函数,函数是对象,对象可以有属性和方法
- js对象的继承以及公有私有属性的定义和读写
- js--3.对象-9.构造函数
- javaScript 利用闭包模拟对象的私有属性
- js 实现图片预加载 (js操作 Image对象属性complete ,事件onload 异步加载图片)
- js 获取一个对象中的所有属性
- JS中undefined、null以及NaN之间的区别,以及对象属性赋值的面试题
- Ext3.3在Ie8中报错ext-all.js对象不支持此属性和方法
- 显示js对象所有属性和方法的函数
- JS 对象属性相关--检查属性、枚举属性等
- 请问js对象属性值为什么用数组也可以访问