• 再说javascript 的__proto__ 和prototype 属性


    过了一段时间,没写 原生的 javascript 的了,感觉天天在用框架写代码,框架写代码完全限定死了你所需要思考的东西,只是在处理一些业务逻辑,真正的代码

    都感觉不会写了。 突然发现,框架用的不熟悉,原生的代码也忘得差不多了。感觉很难受,人生不能这样子度过!

      重新翻开《javascript 高级程序设计》, 回归到本原。工作上用框架写代码没错,业余时间的话就要自己多写一点原生的代码,或者说研究、模仿、直到自己设计一个

    框架出来。

    js 中的类, 对象, 类的静态变量,类的继承 。
    function Scope(){

    这样就是定义了一个类了。

    -------------------------------------------------------------------

    This figure again shows that every object has a prototype. Constructor function Foo also has its own __proto__ which is Function.prototype, and which in turn also references via its __proto__property again to the Object.prototype. Thus, repeat, Foo.prototype is just an explicit property of Foo which refers to the prototype of b and c objects.

    var b = new Foo(20);
    var c = new Foo(30);

    What are the differences between __proto__ and prototype properties?

    Prototype VS. __proto__ VS. [[Prototype]]

    When creating a function, a property object called prototype is being created automatically (you didn't create it yourself) and is being attached to the function object (the constructor).
    Note: This new prototype object also points to, or has an internal-private link to, the native JavaScript Object.

    Example:

    function Foo () {
        this.name = 'John Doe';
    }
    
    // Foo has an object property called prototype.
    // prototype was created automatically when we declared the function Foo.
    Foo.hasOwnProperty('prototype'); // true
    
    // Now, we can assign properties to to the prototype object without declaring it first.
    Foo.prototype.myName = function () {
        return 'My name is ' + this.name;
    }

    If you will create a new object out of Foo using the new keyword, you basically creating (among other things) a new object that has an internal or private link to the function's prototype Foo we discussed earlier:

    var b = new Foo();
    
    b.[[Prototype]] === Foo.prototype  // true

    The private linkage to that function's object called [[Prototype]]. Many browsers are providing us with a public linkage instead that called __proto__!

    To be more specific, __proto__ is actually a getter function that belong to the native JavaScript Object and returns the internal-private prototype linkage of whatever the this binding is (returns the [[Prototype]] of b):

    b.__proto__ === Foo.prototype // true

    It is worth noting that starting of ECMAScript5, you can also use the getPrototypeOf method to get the internal private linkage:

    Object.getPrototypeOf(b) === b.__proto__ // true

    NOTE: this answer doesn't intend to cover the whole process of creating new objects or new constructors, but to help better understand what is __proto__prototype and [[Prototype]] and how it works.
  • 相关阅读:
    @ControllerAdvice + @ExceptionHandler 使用
    将博客搬至CSDN
    Docker pull网络错误
    Centos7.5安装Docker
    Oracle18c创建不带C##的用户
    Centos7.5静默安装Oracle18c
    nodeJs和JavaScript的异同
    maven项目引入本地包,不使用中央仓库
    java中把指数形式的数字转为正常形式显示
    validateJarFile jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
  • 原文地址:https://www.cnblogs.com/oxspirt/p/6517856.html
Copyright © 2020-2023  润新知