Aurora_Meteor
我是越界了吗怎么啥都不懂
wanglingtong
在程序中这么写运行没问题,但js中__proto__这个属性前面加斜杠就表示是内部变量,是不愿意给用户用的,所以一般不建议这么写。
Elias丿纯黑
Student.prototype = {
sayHi: function () {
console.log("my name is " + this.name + "my age is " + this.age + "my class is " + this.classname);
},
learn: function (obj) {
console.log(this.name + "is learning..." + obj);
}
}
这一句不能这么写,这样等于把Student.prototype的值更改为后面所定义的对象,而不是父类的实例,包括你上面定义的constructor属性的定义也会失效,应该写成:
Student.prototype.sayHi=function () {
console.log("my name is " + this.name + "my age is " + this.age + "my class is " + this.classname);
};
Student.prototype.learn=function (obj) {
console.log(this.name + "is learning..." + obj);
};
切记:不要用字面量写法,因为它会整个替换掉prototype所指向的对象
慕圣8408166
es6语法,是一种简写,相当于 constructor : function(){ this[__.poolDic] = { } } , 在class中只能简写,在普通对象中两种方式都可以
桃子橙子柚子
Foo()有个属性prototype。
var egg = new Foo(); //实例化一个egg
Foo.prototype就是egg这个实例的__proto__(原型)。
翻译成大白话:食物(Foo)有个属性prototype,鸡蛋是食物的一个实例,食物的prototype属性就是鸡蛋的原型
qq_潇然_4
你扬声器坏了?
慕哥720458
首先,你需要理解下new这个运算符做了哪些工作:https://www.cnblogs.com/faith3/p/6209741.html
理解了,问题自然就懂了
9玖月
9玖月
PPT就是讲课内容啊,暂停手打啊
一只__别扭的猫
sorry............手误创建的是person的实例不是student............
奔波儿灞_0001
原型对象有一个constructor属性,指向该原型对象对应的构造函数,就像上图我构造一个SuperType()实例,并赋值给 SubType.prototype,但是SubType.prototype继承的是SuperType.prototype上所有属性和方法
in23
首先会在student原型链上查找是否有LEGS_NUM属性,发现没有然后向上查找原型链上是否有LEGS_NUM属性,发现找到了然后赋值完成,调用hi方法时也是一样的程序首先在student原型链上查找,发现找到了就直接返回了,就不会向上查找了
慕粉3830774
用 new object();好点!因为ie9以下的也可以兼容! object.create()是ES5才有的继承父类的原型!不支持id9以下的版本
慕设计2087194
答案是:
Horse.prototype===horse.__proto__
Mammal.prototype===Horse.prototype.__proto__
Animal.prototype===Mammal.prototype.__proto__
本来我问问题的疑惑是 不清楚prototype ,proto和constructor它们的作用和意义
上面例子Animal,Mammal,Horse的prototype都被重写了,Animal.prototype.constructor!==Animal ,Mammal和Horse也是一样,__proto__就是[[proto]]也就是对象的指针,这个对象指针指向自己构造函数的prototype.
qq_放飞心情_0
Person.call(this,name,age); 其中的Person是指视频中的构造函数:
function Person(name,age){
this.name = name;
this.age = age;
}
Person.call(this,name,age);其中的call是指Function.prototype.call(),其中的this在其上下文中指向Student对象。
因此,Person.call(this,name,age);是调用Person构造函数,并把Person构造函数中的this替换为传入的this参数所代表的Student对象,因此Student对象便继承了name和age两个属性。
zuny
通过call可以调用父类的方法
Person.prototype.hi.call(bosn);
momoyy123
你可以这样想,prototype属性里包含有两个属性,一个是构造器,一个是实例原型。当你继承类时,要从父类获取构造器和方法,然而这两个都是保存在prototype属性中。【有误指出】
hct楚
小不点fly
你有两个地方错了,一个地方少了一个逗号,一个地方少了一个this,看图,改过来过后可以正常显示。
funmore
如如不动
抱歉 ,是我看错了
嗨小二
console.log(obj.hasOwnProperty('y'));//false应该这样检测
会飞的柠檬
var data = {
"name": "中国",
"province": [{
"name": "黑龙江",
"cities": {
"city": ["哈尔滨", "大庆"]
}
}, {
"name": "广东",
"cities": {
"city": ["广州", "深圳", "珠海"]
}
}, {
"name": "台湾",
"cities": {
"city": ["台北", "高雄"]
}
}, {
"name": "新疆",
"cities": {
"city": ["乌鲁木齐"]
}
}]
};
//方式一
var provinces = data.province;
for(var i= 0,len=provinces.length;i<len;i++){
var citys = provinces[i].cities.city;
console.log('-----------------'+provinces[i].name+'--------------')
for(var j= 0,jlen=citys.length;j<jlen;j++){
console.log(citys[j]);
}
}
//方式2
var citys2=[];
for(var x= 0,xlen=data.province.length;x<xlen;x++){
citys2 = citys2.concat(data.province[x].cities.city)
}
console.log(citys2);不知道你想要哪一个?
落木栀子
自己写一个仓库来试试
594774261
如果视频右下方没有的话就没有咯
proto
有关系,js面向对象编程,它没有标准的类,需要自己构建,通常作法是构造函数+原型的形式。其中构造函函数内放是实例属性,原型对象上挂方法。如果你还不明白,你需要看的是原型链,构造函数等相关的js核心资料。
leonkwok
表示没有看到ppt
捡了幸福的猪
构造函数的this指向的是在构造函数执行时新建的那个对象,这个新建的对象的原型是Foo.prototype,所以this.y设置的是新建的这个对象的自有属性,所以你说的function Foo(){this.y=2} var obj3=new Foo();obj3.hasOwnProperty('y');结果是false,是不可能的
weibo_暴走的颖颖君_0
完全可以啊
御风天流
视频右下角的列表就是了,点击就可以下载了