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, ...)