js-----对象的构造函数与私有属性

《开场白》
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('小黄');
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上,增加了资源占用。

《结束语》
~~~~啊啊啊,对与初学者的我,听起来真是是懵,关于对象的私有属性的实现,先说到这吧,还是继续学习才可以了解的更加深入!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值