深究JavaScript首页投稿(暂停使用,暂停投稿)JavaScript学习笔记

那些年成为node攻城狮的路(六)

2016-09-12  本文已影响120人  我就是L

对象

var person={age:20};//age属性writeable、configurable、enumerable(默认全为true)
Object.defineProperty(person,'name',{
//那么属性 writeable、configurable、enumerable(默认全为false)
value :'Lyf'
})
//--->由此所构建出来的对象name属性不可修改、删除、和枚举,不允许调用defineProperty;age属性可以删除、修改、枚举、可以多次调用defineProperty。
console.log(person);//{age:20}
person.name='Mx';
person.age=22;
console.log(person);//{age:22}
console.log(person.name);//Lyf
var book ={_year:2004,edition:1}//_约定只能通过对象方法访问,描述符默认全为true
Object.defineProperty(book,'year',{
    enumerable:true,//默认描述符全为false
    get:function(){
        return this._year;
    },
    set :function(value){
        this._year=value;
        this.edition++
    }
});
book.year=2016;
console.log(book)
Object.defineProperties(book,{
name:{writable:true,value:'Lyf'}
age:{get:function(){}}
})
function Person(){
this.name;
}
Person.prototype.sayName=function(){
 console.log(this.name);
}
var p1=new Person('Lyf');
原型-构造函数-实例.png

构造函数.prototype=原型对象
实例.protot=原型对象
原型对象.constructor=构造函数

var p1=new Person();
==>
var p1={};
p1.__proto__=Person.prototype;
Person.call(p1);
F1.prototype=F2; F2.prototype=F3;
F1.prototype.constructor=F1;    F2.prototype.constructor=F2;

hasOwnPrototype(name);返回true表明该name属于实例对象,返回false则表明该实例属于原型对象。

上一篇下一篇

猜你喜欢

热点阅读