学习笔记(致 渐悟)

写在前面的话

今天看<javascript高级程序设计>的时候,看到有关继承和原型链prototype时遇到些疑问,特回来研究下,同时也感谢JS群网友"渐悟"的指导,非常感谢!

先给Demo,再说话

         function Polygon(iSides) {
this.sides = iSides;
this.sex = "男";
this.getName = function () {
console.log("断桥残雪1");
};
}
Polygon.prototype.getName = function () {
console.log("断桥残雪2");
};
Polygon.prototype.getArea = function () {
return 0;
};
Polygon.prototype.sex = "man";
Polygon.age = 100; //三角形
function Triangle(iBase, iHeight) {
//Polygon.call(this, 3);
this.base = iBase;
this.height = iHeight;
this.getName = function () {
console.log("断桥残雪4");
};
} Triangle.prototype = new Polygon();
Triangle.prototype.getArea = function () {
return 0.5 * this.base * this.height;
};
Triangle.prototype.getName = function () {
console.log("wawawa");
}; var obj = new Triangle(2, 7);
//var area = obj.getArea();
obj.getName();
//console.log(area);
console.log(obj.age);
console.log(obj.sex);

测试后总结

  • 新增prototype对象方法,只有其成员实例可以访问该方法,两者决然不同(这一句是废话,嘿嘿),例如:

     A.prototype.Method=function(){ };
    A.Method=function(){ };
  • 原型链prototype可以利用其特殊性,变向的实现继承
  • 类方法/对象方法/原型方法,三者在遇到以下实现时需要注意:
     Triangle.prototype = new Polygon();
    Triangle.prototype = Polygon.prototype;

    => 第一行是将Polygon成员实例赋给Triangle的prototype,包括Polygon的对象属性、方法和原型属性、方法,不包括类属性、方法。
    => 第二行是将Polygon的prototype直接赋给Triangle的prototype,仅包括Polygon中prototype对象的属性和方法。

  • 准确的来说,prototype不能完全实现继承,因为使用protype时是无法传递参数的。若要实现继承,更恰当的方式是用对象冒充的方式继承父类的属性(当然prototype也可以继承父类的属性,有局限),然后用原型链继承父类的方法。
  • 当父类存在成员方法A,然后父类的原型链中也存在方法A,子类继承了父类,且子类也重写了成员方法A和prototype对象方法A,则他们的调用顺序优先级为:子类A() > 子类prototype对象方法A() > 父类成员方法A() > 父类prototype对象方法A()

结语

好了,今天后来有事儿去了,耽搁了,差点忘记了,要不然明天捂脸见你,说句实话我回来学习了下,也就知道这些了,希望你看到有错误不足啥的可以提出,谢谢!

今天身为程序员的班子,十一抢火车票,又用客户端App又用浏览器插件的,还是木有抢到票,啊啊啊......

最新文章

  1. monkey之monkey命令详解
  2. java7笔记
  3. int和char的相同和不同。
  4. 配置github上的SSH key及上传自己的项目到github
  5. Hibernate笔记——第一个简单实例
  6. 语言基础:C#输入输出与数据类型及其转换
  7. BZOJ 1059 [ZJOI2007]矩阵游戏
  8. 关于JavaScript的那些话
  9. Kafka简介、基本原理、执行流程与使用场景
  10. vs2019离线安装包下载
  11. elasticsearch-mapping字段重要属性
  12. SpringBoot系列——WebSocket
  13. Angular4中路由Router类的跳转navigate
  14. Java并发编程_synchronized关键字的用法(一)
  15. JavaSE——网络编程基础知识
  16. No module named &#39;MySQLdb&#39; Python3 + Django 2.0.3 + mysql 无法连接
  17. Android 下拉刷新上拉加载PullToRefresh
  18. 【BZOJ 1415】 1415: [Noi2005]聪聪和可可 (bfs+记忆化搜索+期望)
  19. Django 1.5.4 专题二 urls 和 view 提高
  20. Binary Watch二进制时间

热门文章

  1. UI3_UIViewController生命周期
  2. jquery页面滚动,菜单固定到顶部
  3. http: URL、请求方式
  4. Codevs 1092 不高兴的津津
  5. git 合并本地代码到分支
  6. ASP.NET MVC 表单的几种提交方式
  7. js中隐式类型转换测试
  8. windows下apache配置https
  9. .NET SOCKET通信编程
  10. Delphi XE5教程7:单元引用和uses 子句