首页 > 原型问题继承

原型问题继承

var obj = function(){
     this.name=12;
     this.get="年龄";
     this.age=new Date();
  }
     Object.defineProperties(obj,{tilt:{
     value:66,
     configurable:true,
     wirtable:true,
     enumerable:false
     },z:{
      value:11,
      configurable:false,
      writable:false,
      enumerable:false
     }})
     obj.prototype={
      add:12,
      sb:16
     }   //这个跟上面defineProperties都是添加属性,有什么区别?

     var obj1 = new obj()
    //1.obj是原型吗?
    // 2.为什么 obj1不能访问definProperties创建的属性, 返回的是undefined,
    //用obj,就能访问这些属性了
    // 3.obj1 = new obj(); 这是叫obj1继承了obj的属性吗?
    // 4.什么叫继承?什么叫原型啊?对原型这块,蒙圈了
    //在此感谢回答的朋友们!!!

老生常谈
1.所有new出来的叫做实例(等号左边);
2.被new的fn叫做构造函数(等号右边->new的右边);
3.__proto__和prototype都是属性名,一个名字而已,就跟json={a:1}中的a一样一样!
4.3中那两个属性名的值是一个json,但json是一个复合数据类型,所以又叫做指针(本质还是属性名,名字而已,just so so);
5.prototype的值又叫做“原型对象”,__proto__的值又叫做“原型链对象”;
6.prototype是挂在构造函数下面的,是构造函数的属性;
7.构造函数的prototype跟实例没什么直接联系,就像你妈是你妈你是你,你俩通过血缘关系才有联系;
8.__proto__就是实例跟构造函数的血缘关系;
9.__proto__的值是构造函数prototype的值;
10.竟然没问constructor;
11.估计10没问是因为早就会了,所以我刚刚1-9纯属测试键盘,当然有不对的地方还请指正,我回去好修理键盘;
12.以上。


JavaScript之原型链
Javascript重温OOP之原型与原型链
JavaScript原型及原型链


Object.defineProperties可定限制屬性的編修等等..

1.obj.prototype才是原型
2.因為obj1的原型指obj.prototype,所以在obj向身上找不到add,是去obj.prototype找,而不是obj
3.這叫obj實例化創建obj1,js預設obj1的原型會指向obj.prototype,所以在obj1上找不到的屬性會去obj1上找
4.仔細看看樓上連結的內容吧...

原型

function Person(name) {
  this.name = name;
}

Person.prototype.age = 20;

var john = new Person('john');

//經由john的原型,得到屬性
console.log(john.age);

因為有原型,才能做到繼承

function Person() {
  this.age = 20;
  this.setName = function(name) {
    this.name = name;
  };
}

function Studen(major) {
  this.major = major;
}

//修改Studen的原型,始其繼承Person的屬性
Studen.prototype = new Person();

var john = new Studen('IT');

console.log(john.age);

john.setName('john');

console.log(john.name);

var obj1 = new obj();

//定义的属性在obj这个构造函数上面,所以实例化后,可以通过constructor访问到对应属性
//注意:函数也是Object类型(obj instanceof Object)继承于Object

obj1.constructor.add  // 12
obj1.constructor.sb   // 16

如果要定义obj1属性,应该将属性设置在 构造函数的prototype上面


Object.defineProperties(obj.prototype, ...)
【热门文章】
【热门文章】