JavaScript 杂记(三)对象创建与原型属性初步

一、对象创建
1、对象工厂
即使用函数返回对象的方式创建对象:

function CreatePerson_name){
    return {
        name:_name,
        age:'18'
    }
}
var p1 = CreatePerson('张三');

2、new 关键字
js同样可以使用new关键字创建对象(该方式会多出部分特性,即原型将在后文提到):

function Person_name){
    this.name = _name;
    this.age = '18';
    this.say = function(_content){
        console.log(_content);
    }
}
var p1 = new Person('张三');
p1.say('我是'+p1.name);

二、原型属性初步理解
1、prototype属性
通过new关键字,我仿佛回到了java,但java中的类可以定义静态属性和方法又该如何实现,学到原型属性总算可以完成了。例:

function Person(){
    this,name = '张三';
}
Person.prototype.count = 5;//添加公有属性,也可以是一个函数
var p1 = new Person();
var p2 = new Person();
console.log("p1.count = "+p1.count);//5
console.log("p2.count = "+p2.count);//5

可以看到,两个对象都有了count属性,且值是相同的,这就实现了一个公有属性(方法),注:当你使用公有属性并赋值时,对象将会创建该属性,而不是改变原型属性的值,如:

p1.count = 1;//属性的动态创建机制使得当前对象有了自己的count属性
p2.count = 2;
console.log("p1.count = "+p1.count);//1
console.log("p2.count = "+p2.count);//2

此时得到的将会是两个值,那如何操作公有属性呢,你可以通过访问对象的构造器,再访问原型属性来实现如:

var p3 = new Person();//p1,p2添加了count属性所以新建一个对象用于示例
p3.constructor.prototype.count++;
console.log(p3.count);//6

此处的操作方式略显复杂,当然在java中也不提倡这样的写法,最好用以下方式操作:

Person.prototype.count++;

另外也可以将以上代码封装为一个函数以简化书写。

2、__proto__属性

除了构造函数中含有prototype属性,在每个对象中还含有一个__proto__属性(注意:只有chrome等少量浏览器支持,所以不要去使用,用于学习理解即可),该属性指向与prototype指向相同的公共对象,但要注意,当你改变了prototype的引用,当前构造函数已经创建的对象还是在使用之前的公共属性:

Person.prototype = {//此处改变了原型属性指向的对象,之前只改变了共有对象中的某个属性
        count:100,
        color:'yellow'
    };
console.log(p3.count);
var p4 = new Person();//此时p4使用了新的公有属性
console.log(p4.color);//yellow(之前的p1,p2,p3不能使用新建的属性)

图示:
这里写图片描述
这就是当你改变prototype的引用后之前创建的对象所用的公共属性并未改变的原因。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值